想要在windows之间远程访问,最重要的模块是winRM.Windows 远程管理 (WinRM) 是 WS-Management 协议的 Microsoft 实现。该协议是基于简单对象访问协议 (SOAP) 的、防火墙友好的标准协议,使来自不同供应商的硬件和操作系统能够互操作。WS-Management 协议由硬件和软件制造商群体开发,作为一种公共标准,可用于与实现该协议的任何计算机设备远程交换管理数据。
1,非交互式保存凭据代码示例:
$creda = get-credential$account = "administrator" $password = '1234' $secpwd = convertto-securestring $password -asplaintext -force $creda = new-object System.Management.Automation.PSCredential -argumentlist $account,$secpwd
2,交互式远程访问:
$creda=get-Credential
# 远程执行命令
invoke-command -computername test -Credential $creda -command {dir C:/}
invoke-command -computername test -Credential $creda -ScriptBlock {dir c:\}
echo "dir c:\" > test.ps1
invoke-command -computername test -Credential $creda -FilePath .\test.ps1
$session_test = new-pssession -computername test -Credential $creda
# 远程执行命令(持续性)
Invoke-Command -Session $session_test -ScriptBlock {$b="hello mingo"}
Invoke-Command -Session $session-test -ScriptBlock {$b}
同时可以调用列表来对多台机器进行远程访问,控制
我还想说的是以上的方法分在域环境和非域环境的,在域环境下需要添加互信。
get-childitem wsman:\localhost\client\trustedhosts
get-item wsman:\localhost\Client\TrustedHosts
参考脚本:
#names = "ps1203","ps2342"foreach{$1 in $name}{add-windowsferature -Name web-server -includeallsubfeature -includemanagementtools -restart -computername #1}