Powershell 提供一个-Command“&{…}”到-Command“{…}”的区别——它们似乎做了同样的事情

Powershell 提供一个-Command“&{…}”到-Command“{…}”的区别——它们似乎做了同样的事情,powershell,Powershell,如果在2分钟内发现,我需要终止一个可能的重生计划 两者的区别是什么 Powershell.exe -Command "& {for ($i=1; $i -le 1200; $i++) { Stop-Process -Name ExecuteableName.exe -Force 2>&1|out-null; Start-Sleep -m 100; }}&q

如果在2分钟内发现,我需要终止一个可能的重生计划

两者的区别是什么

Powershell.exe -Command "& {for ($i=1; $i -le 1200; $i++) 
                         { Stop-Process -Name ExecuteableName.exe -Force  2>&1|out-null; 
                           Start-Sleep -m 100; }}"

省略-executionpolicy remotesigned以简化两个调用?我不在PS外壳内,而是使用普通的CMD.exe或TCC/LE JPE软件外壳

如果我用一些输出替换停止进程或删除outputstream重定向,两者看起来是相同的-但是powershell.exe/help建议使用&variant

我通读了一遍又一遍

但是没有得到,有什么区别

这两者有什么区别

在这种情况下,它们在功能上是相同的。有几点你需要理解才能知道确切的区别

第一个是。它可以是:-、字符串或脚本块

忽略-因为它只是另外两个中的一个,但来自标准输入而不是参数。字符串最容易理解,因为它只是PowerShell代码。两个示例都使用字符串参数。但是,ScriptBlock仅作为类型存在于PowerShell中:

当Command参数能够将传递给Command的值识别为ScriptBlock类型时,它仅接受脚本块执行。这仅在从另一台PowerShell主机运行PowerShell.exe时才可能

您没有提到用于调用Powershell.exe的shell,但它可能不是Powershell,因此无法使用ScriptBlock。例如:

PS>Powershell.exe-命令{Write Host'Hello world!' 你好,世界! 要理解的第二点是什么是ScriptBlock。有相关文档,但我个人认为它对理解细微差别没有多大帮助。 如果将ScriptBlock分配给变量,可能更容易理解

PS>$block={写主机“你好,世界!”} PS>&$block 你好,世界! 虽然脚本块很有用,但在本例和第一个示例中,使用更简单的脚本块没有任何好处

PS>写主机“你好,世界!” 你好,世界! 但是powershell.exe/help建议使用&variant

我不知道你在读什么,但很可能只是描述了如何避免这种情况:

您可以在字符串中编写脚本块,但它不会被执行,而是会像您在典型的PowerShell提示符下键入脚本块一样,将脚本块的内容打印回给您

类似于

PS>$block={写主机“你好,世界!”} PS>$block 写下主持人“你好,世界!”
Powershell.exe -Command "for ($i=1; $i -le 1200; $i++) 
                         { Stop-Process -Name ExecuteableName.exe -Force  2>&1|out-null; 
                           Start-Sleep -m 100; }"