You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用变量无法获取已安装Windows功能角色的技术求助

问题解决:PowerShell远程执行时本地变量无法访问的问题

你的问题核心是远程脚本块无法访问本地定义的$Role变量,因为Invoke-Command的脚本块是在远程服务器的独立会话中运行的,默认看不到本地机器上的变量,所以用$Role时远程会话里找不到这个变量,自然匹配不到任何结果。

下面是两种直接有效的解决方法:

方法一:使用Using:作用域修饰符

在脚本块里的变量前加上$using:前缀,让PowerShell自动把本地变量的值传递到远程会话中:

$List = (Get-ADComputer -Filter 'OperatingSystem -like "*server*" -and enabled -eq "true"').name
$Role = 'RDS-RD-Server' # 无需ToString(),字符串字面量本身就是String类型

Invoke-Command -ComputerName $List -ScriptBlock { 
    Get-WindowsFeature | 
        Where-Object { $_.Name -eq $using:Role -and $_.InstallState -eq "Installed" } | 
        Select-Object PsComputerName, InstallState 
} -ErrorAction Ignore

方法二:通过-ArgumentList传递参数

将本地变量作为参数传给远程脚本块,在脚本块内部用param定义接收参数:

$List = (Get-ADComputer -Filter 'OperatingSystem -like "*server*" -and enabled -eq "true"').name
$Role = 'RDS-RD-Server'

Invoke-Command -ComputerName $List -ScriptBlock { 
    param($TargetRole)
    Get-WindowsFeature | 
        Where-Object { $_.Name -eq $TargetRole -and $_.InstallState -eq "Installed" } | 
        Select-Object PsComputerName, InstallState 
} -ArgumentList $Role -ErrorAction Ignore

补充说明:你代码里的('RDS-RD-Server').ToString()属于多余操作,字符串字面量本身就是String类型,直接赋值即可。

内容的提问来源于stack exchange,提问作者Nuisance

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 17:02:42