Get-WmiObject 不能在 PowerShell (x86) 但在 PowerShell 上执行
Posted
技术标签:
【中文标题】Get-WmiObject 不能在 PowerShell (x86) 但在 PowerShell 上执行【英文标题】:Get-WmiObject can't be executed on PowerShell (x86) but on PowerShell 【发布时间】:2017-01-26 05:31:38 【问题描述】:为什么我可以在 PowerShell 上执行以下代码,但不能在同一台计算机上的 PowerShell (x86) 上执行?
Get-WmiObject -Namespace "root\Microsoft\SqlServer\ComputerManagement13" -Class ServerSettingsGeneralFlag -Filter "FlagName='ForceEncryption'"
例外:
在 line:1 char:1 + 获取 WmiObject -命名空间“root\Microsoft\SqlServer\ComputerManagement ... + CategoryInfo : NotSpecified: (:) [Get-WmiObject], FileNotFoundException + FullyQualifiedErrorId : System.IO.FileNotFoundException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
【问题讨论】:
我怀疑相应的命名空间或类在 32 位环境中不存在。您可以使用以下内容枚举命名空间:function List-WmiNamespaces Get-WmiObject -Namespace $args[0] -Class '__namespace' | ForEach-Object $ns = '0\1' -f $_.__Namespace, $_.Name; $ns; List-WmiNamespaces $ns; List-WmiNamespaces 'root\microsoft'
,以及命名空间中的类:Get-WmiObject -Namespace 'root\Microsoft\SqlServer' -List | Select-Object -Expand Name
。
我确实安装了 64 位 SQL Server。但是这两个脚本在 64 位和 32 位 PowerShell 上得到相同的结果。即 "root\Microsoft\SqlServer\ComputerManagement13" 和 ServerSettingsGeneralFlag 都存在。
【参考方案1】:
正如@AnsgarWiechers 所说,它可能不存在。至于为什么,可能你安装的是 64 位的 SQL Server 而不是 32 位的?
您可能能够解决此问题的一种方法是使用 PowerShell 远程处理。如果启用并配置了 PowerShell 远程处理,您可以从 32 位进程远程访问您自己的计算机,并且您将连接到 64 位实例。因此,您可以运行此代码以从 64 位会话中获取结果。
$result64 = Invoke-Command -ComputerName . -ScriptBlock
Get-WmiObject -Namespace "root\Microsoft\SqlServer\ComputerManagement13" -Class ServerSettingsGeneralFlag -Filter "FlagName='ForceEncryption'"
【讨论】:
你的脚本对我有用。即使@ansgar-wiechers 脚本得到相同的结果。以上是关于Get-WmiObject 不能在 PowerShell (x86) 但在 PowerShell 上执行的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Get-WmiObject 返回最新版本的 java
使用 powershell 和 Get-WmiObject 检查给定进程是不是以提升的权限运行
Get-WmiObject -Class powershell 命令在 Windows7 中不起作用
Get-WmiObject : RPC 服务器不可用。 (HRESULT 异常:0x80070 6BA
win8系统快要过期激活,输入(Get-wmiObjeCt.......PrOductkey出现不
没有使用 (Get-WmiObject -Class win32_computersystem -ComputerName $computer).UserName 获取远程用户名