我正在尝试使用以下命令在我的服务器上使用 PSexec 启用-psremoting:
psexec.exe \\server cmd /c "echo . | powershell (-verb runas -argumentlist (enable-psremoting -force))"
但它不起作用。我猜我弄乱了我的双引号。有什么帮助吗?
孙:)
我正在尝试使用以下命令在我的服务器上使用 PSexec 启用-psremoting:
psexec.exe \\server cmd /c "echo . | powershell (-verb runas -argumentlist (enable-psremoting -force))"
但它不起作用。我猜我弄乱了我的双引号。有什么帮助吗?
孙:)
为此,您不需要 PSExec。检查 PowerShell 开发人员 Lee 的此脚本。
谢谢大家的评论!我发现了如何做到这一点,这是完整的代码:
$user = "youruser"
$p = Read-Host "Enter domain password for $adminuser"
cls
$expression1 = "enable-psremoting -force"
$commandBytes1 = [System.Text.Encoding]::Unicode.GetBytes($expression1)
$encodedCommand1 = [Convert]::ToBase64String($commandBytes1)
$expression2 = "Set-ExecutionPolicy remotesigned -Force”
$commandBytes2 = [System.Text.Encoding]::Unicode.GetBytes($expression2)
$encodedCommand2 = [Convert]::ToBase64String($commandBytes2)
$expression3 = "Restart-Service winrm”
$commandBytes3 = [System.Text.Encoding]::Unicode.GetBytes($expression3)
$encodedCommand3 = [Convert]::ToBase64String($commandBytes3)
foreach ($server in (get-content c:\temp\enablepsremotinglist.txt))
{
echo " "
echo "Running on $server"
echo "--------------------------------------- "
echo " "
psexec.exe \\$server -h -u no\$user -p $p cmd /c "echo . | powershell -EncodedCommand $encodedCommand1"
psexec.exe \\$server -h -u no\$user -p $p cmd /c "echo . | powershell -EncodedCommand $encodedCommand2"
psexec.exe \\$server -h -u no\$user -p $p cmd /c "echo . | powershell -EncodedCommand $encodedCommand3"
}
我希望有一天这对其他人有所帮助:) PS:请记住,这会将您的管理员密码以明文形式发送..
看起来您正在尝试调用 PowerShell 以运行提升。这可能无法远程完成......我能够让它在没有启用 UAC 的机器上工作(2003 服务器):
$c = Get-Credential
$u = $c.UserName
$p = $c.GetNetworkCredential().Password
$path = "C:\SysinternalsSuite"
& "$path\psexec.exe" \\server -u $u -p $p powershell.exe -Command "Enable-PSRemoting -Force"
出于某种原因,尽管我不得不在 shell 上按几次 enter 才能继续输出输出并最终将我返回到提示符。不知道那是怎么回事...