batch-file - 使用Powershell运行Psexec命令

标签 batch-file powershell psexec

第一篇文章,所以请不要伤害我。我到处搜寻,但似乎找不到找到想要的方法。我已经制作了一个脚本,可以将我拥有的文件夹复制到\$ computer\c $的多台计算机上。在这些文件夹中是运行.exe的批处理文件。我想要做的是从我用来复制文件夹的同一computers.txt中提取Powershell,然后使用psexec运行批处理文件。我可以手动完成所有操作,但是编写脚本似乎是个问题,这是我认为可以的,但显然不行。

    $computers = gc "C:\scripts\computers.txt"

foreach ($computer in $computers) {
if (test-Connection -Cn $computer -quiet) {
    cd C:\pstools
    psexec \\%computer cmd
    C:\Folder\install.bat"
} else {
    "$computer is not online"
}

}

最佳答案

好的,让我们从顶部开始。

$computers = gc "C:\scripts\computers.txt"

将“computers.txt”文件的内容加载到变量$computers中。很简单,没有问题。

接下来,我们有一个ForEach循环。它拆分$computers的内容,并将每一行(大概是计算机的名称)作为$computer与花括号中的所有代码进行处理。
foreach ($computer in $computers) {

该循环以标准的If-Then语句开始。如果为(condition),则为{do stuff}。在这种情况下,正在测试以查看$computer在网络上是否可用。如果是,则尝试在其上运行PSExec。如果它不是在线的,它将运行Else子句,我们将在稍后讨论。
if (test-Connection -Cn $computer -quiet) {

然后,它更改目录。有点毫无意义,但是好吧,随便吧。您可能已经明确地调用了它,例如C:\PSTools\PSExec.exe <arguments>并保存了一行,但是实际上并没有造成任何伤害。
cd C:\pstools

然后,您正在调用PSExec,尽管此处存在一些语法错误。它应该是$computer而不是%computer。另外,它应该只包含您要执行的命令,而不是cmd和第二行上的命令。如果使用Call运算符(&)使powershell意识到它正在尝试执行某些操作而不运行cmdlet或函数或不执行任何操作,则可能会得到更好的结果。
& psexec \\$computer C:\Folder\install.bat

之后是Else子句,如果计算机未联机,则写字符串“$ computer is not online”,然后关闭Else子句和ForEach循环的花括号。
} else {
    "$computer is not online"
}


}

编辑:好吧,您完成的脚本应类似于以下内容(如果路径中有空格,请用引号引起来):
$computers = gc "C:\scripts\computers.txt"

foreach ($computer in $computers) {
    if (test-Connection -Cn $computer -quiet) {
        & C:\pstools\psexec.exe \\$computer "C:\folder\install.bat"
    } else {
        "$computer is not online"
    }
}

关于batch-file - 使用Powershell运行Psexec命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23119506/

相关文章:

powershell - 如何解码 Base64 字符串?

permissions - 如何在将文件复制到网络位置的批处理脚本中提供凭据?

batch-file - 如何使用通配 rune 件名作为命令行参数调用 Windows 批处理脚本

powershell - 如何创建 Azure AD 应用程序 key ?

c# - 如何从 c# powershell 脚本执行中提取 $lastexitcode

sql-server - 从 xp_cmdshell 调用时 psexec 无法正常工作

powershell - PSExec Pass参数带有Powershell空格

windows - PSExec 不显示已启动子进程的输出(本地计算机)

windows - 如何使用 cmd 附加到 .txt 文件的每一行

batch-file - 排序整数并计算批处理文件中前 20 名的平均值