PowerShell解决方案:在旧版PowerShell远程服务器上运行不支持的模块
问题答案
完全可以实现,不需要升级目标服务器的PowerShell版本,也不需要在目标服务器持久安装对应模块,可通过临时向远程会话传输模块文件并临时加载的方式达成目的。
操作步骤
- 第一步:本地获取
Microsoft.PowerShell.LocalAccounts模块的本地文件夹路径
$localModulePath = (Get-Module -Name Microsoft.PowerShell.LocalAccounts -ListAvailable).ModuleBase
- 第二步:建立和目标Server 2012的远程会话
$targetServer = "你的Server2012计算机名" $cred = Get-Credential -Message "输入目标服务器管理员账号密码" $session = New-PSSession -ComputerName $targetServer -Credential $cred
- 第三步:将本地模块文件复制到远程会话的临时目录,仅存在于会话关联的临时空间,不会持久写入服务器系统目录
$remoteTempPath = Invoke-Command -Session $session -ScriptBlock { $env:TEMP } Copy-Item -Path $localModulePath -Destination "$remoteTempPath\Modules" -Recurse -ToSession $session
- 第四步:在远程会话中导入临时目录下的模块
Invoke-Command -Session $session -ScriptBlock { Import-Module "$env:TEMP\Modules\Microsoft.PowerShell.LocalAccounts" -Force }
- 第五步:在远程会话中调用对应cmdlet执行操作,示例为查询本地管理员组成员
Invoke-Command -Session $session -ScriptBlock { Get-LocalGroupMember -Group "Administrators" }
- 操作结束后关闭会话即可,临时目录的模块文件会被系统自动清理,不会在目标服务器残留
Remove-PSSession $session
补充说明:如果需要批量操作多台服务器,可遍历服务器列表批量创建会话执行上述逻辑即可,所有操作都不会修改目标服务器的原有系统配置。
内容的提问来源于stack exchange,提问作者DanLo
相关产品推荐
相关产品推荐

