想要在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.ps1invoke-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}