[英]PowerShell with Invoke-Command/PSExec
假设我有一个名为“ PCs.csv”的CSV文件,其中包含三个“列”(“名称”,“用户”和“ pw”)。
现在,我们还假设我想使用与其关联的凭据在每台PC上运行一个非常简单的命令。
最初,由于Server和Workstation都使用PS 5.0(并且启用了PSRemoting),所以我正在使用Invoke-Command
进行测试,结果输出正是我想要的(与在运行Windows Server 2003的计算机上使用时完全相同)命令)。 但是,问题在于...我在机器上。 Powershell用来运行命令的凭据的用户属于该用户。 结果丝毫不明显。
然后...我想我会使用PSExec。 返回错误说明:
psexec.exe : The system cannot find the file specified.
At line:7 char:5
+ & C:\PSTools\PSExec.exe \\$pc.name /accepteula -u $un -p $pc.pw "n ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (The system cann...file specified.:Strin
g) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
Error opening {name=PC01; user=user01; pw=pass01}.name:
因此,下面是我使用的两个脚本...我只需要其中之一即可工作。 实际上,这是个谎言……我什至不需要其中的一个工作……如果还有其他更好的工作,我就是平等的机会!
调用命令:
$PCs = Import-Csv "C:\PCs.csv"
ForEach ($pc in $PCs) {
$un = "DOM\" + $pc.user
$pw = ConvertTo-SecureString $pc.pw -AsPlainText -Force
$creds = New-Object System.Management.Automation.PSCredential ($un,$pw)
Invoke-Command -ComputerName $pc.name -Credential $creds -ScriptBlock {
cmd.exe /c "net use * /delete /yes"
}
}
和PSExec:
$PCs = Import-Csv "C:\PCs.csv"
ForEach ($pc in $PCs) {
$un = "DOM\" + $pc.user
& C:\PSTools\PSExec.exe \\$pc.name /accepteula /u $un /p $pc.pw "net use * /delete /yes"
}
我敢肯定我确实缺少一些愚蠢的东西,因此我对此表示歉意。 但是,好的一面-如果是这样,至少我们所有人都可以大笑一声:)
如果不需要断开已登录会话使用的驱动器映射,则不需要psexec,因为您不需要在用户会话中运行命令。 冒充用户并加载配置文件就足够了,因为驱动器映射是通过net use
存储的(如果提供了驱动器号,并且设置了/ persistence标志)存储在注册表的用户特定部分HKCU中( Get-Childitem -path HKCU:\\network
显示持久驱动器映射, net use
显示活动驱动器映射)。 为了验证这一点,首先我使用RDP登录到会话,并使用持久标记进行了驱动器映射。 然后,我使用您的脚本删除了该驱动器映射:
$PCs = Import-Csv "C:\PCs.csv"
ForEach ($pc in $PCs) {
$un = "SSS\" + $pc.user
"user: $un, password: $($pc.pw)"
$pw = ConvertTo-SecureString $pc.pw -AsPlainText -Force
$creds = New-Object System.Management.Automation.PSCredential ($un,$pw)
Invoke-Command -ComputerName $pc.name -Credential $creds -ScriptBlock {
whoami /user
Get-Childitem -path HKCU:\network
cmd.exe /c "net use * /delete /yes"
Get-Childitem -path HKCU:\network
}
}
下次我使用RDP登录时,不再创建驱动器映射。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.