在部署之前,我试图杀死使用PowerShell Invoke-Command锁定文件的进程
这是我的代码:
$password = ConvertTo-SecureString "password" -AsPlainText -Force
$credentials = New-Object System.Management.Automation.PsCredential("Admin",$password)
$scriptBlock = {Get-Process | Where-Object { $_.MainWindowTitle -like 'MyApp*'} | Stop-Process}
Invoke-Command -computername Agent1 -Credential $credentials -scriptblock $scriptBlock
不幸的是,它什么也不做,也不会抛出任何错误。
在机器上,可以正常工作:
Get-Process | Where-Object { $_.MainWindowTitle -like 'MyApp*'} | Stop-Process
答案 0 :(得分:1)
如上所述,创建一个PS会话对象:
$ErrorActionPreference = "Stop"
$password = ConvertTo-SecureString "password" -AsPlainText -Force
$credentials = New-Object System.Management.Automation.PsCredential("Admin",$password)
$scriptBlock = {
$process = Get-Process
$process | Where-Object { $_.MainWindowTitle -like 'MyApp*'} | Stop-Process}
$process
}
$session = New-PsSession -ComputerName "Agent1" -Credentials $credentials
$remoteProcess = Invoke-Command -Session $session -Credential $credentials -scriptblock $scriptBlock
$remoteProcess | format-table
以上代码还将为您返回在远程主机上运行的列表进程。根据{{1}},您将看到要杀死的进程是否正在运行。我还将$remoteProcess
设置为ErrorActionPreference
,这会强制上述代码在出现第一个错误时停止(如果无法创建会话)。
希望有帮助