我创建了一个.ps1脚本,该脚本在多台服务器上远程运行一个.exe文件。这个.exe文件创建了一个output.xml。现在我想更改它的名称,对于每个具有随机名称的服务器,或者如果可能的话,与运行该.exe的服务器的名称相同。下面你可以看到我的代码:
foreach ($computers in ($computers = Get-Content 'C:testcomp.txt'))
{
$server ={& 'C:Program Files (x86)myexe.exe' --outputfile='C:test.xml'}
Invoke-Command -ScriptBlock $server -ComputerName $computers
}
Myexe.exe文件在$computers变量中定义的每台计算机上运行。是否存在更改每个服务器的test.xml名称的可能性?
是的,您可以使用$env:
变量,点击链接了解更多信息。在这种情况下,您可以使用$env:COMPUTERNAME
来获取每个服务器的主机名:
foreach ($computer in (Get-Content 'C:testcomp.txt'))
{
# Note you can Append the Date too to your outfile
# Example: "C:$env:COMPUTERNAME - $([datetime]::Now.ToString('MM.dd.yy HH.mm')).xml"
# Would return a filename "serverName1 - 06.17.21 13.35"
$server ={& 'C:Program Files (x86)myexe.exe' --outputfile="C:$env:COMPUTERNAME.xml"}
Invoke-Command -ScriptBlock $server -ComputerName $computer
}
另一方面,你并不真的需要一个foreach
循环来遍历所有的计算机。Invoke-Command -ComputerName
自变量接受一组计算机:
$computers = Get-Content 'C:testcomp.txt'
# Assuming $computers holds each hostname in a new line like
# computername1
# computername2
# ...
# ...
# This should work just fine
$server ={& 'C:Program Files (x86)myexe.exe' --outputfile="C:$env:COMPUTERNAME.xml"}
Invoke-Command -ScriptBlock $server -ComputerName $computers