sql-server
  • powershell
  • filenotfoundexception
  • 2016-09-18 99 views 1 likes 
    1

    爲什麼我可以在PowerShell上執行以下代碼,而不是在同一臺計算機上的PowerShell(x86)上執行以下代碼?Get-WmiObject無法在PowerShell(x86)上執行,但在PowerShell上執行

    Get-WmiObject -Namespace "root\Microsoft\SqlServer\ComputerManagement13" -Class ServerSettingsGeneralFlag -Filter "FlagName='ForceEncryption'" 
    

    例外:

    At line:1 char:1 
    + Get-WmiObject -Namespace "root\Microsoft\SqlServer\ComputerManagement ... 
        + CategoryInfo   : NotSpecified: (:) [Get-WmiObject], FileNotFoundException 
        + FullyQualifiedErrorId : System.IO.FileNotFoundException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
    +3

    我懷疑各個名稱空間或類在32位環境中不存在。你可以像這樣枚舉命名空間:'function List-WmiNamespaces {Get-WmiObject -Namespace $ args [0] -Class'__namespace'| ForEach-Object {$ ns ='{0} \ {1}'-f $ _.__命名空間,$ _。Name; $納秒; List-WmiNamespaces $ ns}}; List-WmiNamespaces'root \ microsoft'',以及像這樣的命名空間中的類:'Get-WmiObject -Namespace'root \ Microsoft \ SqlServer'-List |選擇對象擴展名稱「。 –

    +0

    我確實安裝了64位SQL Server。 但是,這兩個腳本在64位和32位PowerShell上都得到相同的結果。 既存在「root \ Microsoft \ SqlServer \ ComputerManagement13」和ServerSettingsGeneralFlag。 –

    回答

    0

    正如@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'" 
    } 
    
    +0

    你的腳本適合我。 儘管@ ansgar-wiechers腳本得到了相同的結果。 –

    相關問題