第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何在 C# 中獲取 PSObject.Properties 的 ScriptProperty 值?

如何在 C# 中獲取 PSObject.Properties 的 ScriptProperty 值?

C#
喵喵時(shí)光機(jī) 2022-12-24 11:47:04
我正在嘗試使用“GET-PSDrive”命令通過(guò) PowerShell 6.0 獲取服務(wù)器的驅(qū)動(dòng)器信息。直接在 PowerShell 中運(yùn)行命令,我在輸出表中看到“已用”和“免費(fèi)”的值,但在代碼中運(yùn)行相同的命令雖然使用 Microsoft.Powershell.Sdk,但“已用”和“免費(fèi)”字段不是可用的。我看到 PSObject.Properties 數(shù)組下列出的兩個(gè)項(xiàng)目,但嘗試訪問(wèn)我收到異常的值:“沒(méi)有可用于在此線程中運(yùn)行腳本的運(yùn)行空間。您可以在 System.Management.Automation.Runspaces.Runspace 類(lèi)型的 DefaultRunspace 屬性中提供一個(gè)。您嘗試調(diào)用的腳本塊是:##”以下是我正在使用的 POC 代碼:using (var psCon = PowerShell.Create()){     psCon.AddCommand("GET-PSDrive");     var psReturn = psCon.Invoke();     foreach (var psObj in psReturn)     {          var driveUsedValue = psObj.Properties["Used"].Value;     }}我期望獲得該屬性的值,但每次評(píng)估該值時(shí),我都會(huì)收到一條錯(cuò)誤消息,指出沒(méi)有可用的運(yùn)行空間。檢查該屬性,我確實(shí)看到它是一個(gè) ScriptProperty,那么您如何獲取生成的值呢?
查看完整描述

1 回答

?
暮色呼如

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超9個(gè)贊

Used 屬性稱(chēng)為 ScriptProperty。這意味著當(dāng)它被調(diào)用時(shí)它會(huì)運(yùn)行一個(gè)腳本。我們可以通過(guò)調(diào)用看到這一點(diǎn):


get-PSDrive | get-member -Name Used

這返回


Name MemberType     Definition

---- ----------     ----------

Used ScriptProperty System.Object Used {get=## Ensure that this is a FileSystem drive...

我們可以深入挖掘并查看正在運(yùn)行的腳本


get-PSDrive  | get-member -Name Used | select -ExpandProperty Definition

這將返回


System.Object Used {

    get=## Ensure that this is a FileSystem drive

    if($this.Provider.ImplementingType -eq [Microsoft.PowerShell.Commands.FileSystemProvider]){

        $driveRoot = ([System.IO.DirectoryInfo] $this.Root).Name.Replace('\','')

        $drive = Get-CimInstance Win32_LogicalDisk -Filter "DeviceId='$driveRoot'"

        $drive.Size - $drive.FreeSpace

    };

}

這就是您得到異常的原因There is no Runspace available to run scripts in this thread。這是因?yàn)樵撔畔⑦\(yùn)行需要運(yùn)行空間的腳本。


要解決此問(wèn)題,您可以將所有屬性轉(zhuǎn)換為這樣的注釋屬性


Get-PSDrive | %{

    $drive = $_

    $obj = new-object psobject

    $_.psobject.Properties.GetEnumerator() | %{

        $obj | Add-Member -MemberType NoteProperty -name $_.Name -Value $drive."$($_.name)" 

    }

    $obj

}

或者正如@mklement0 在評(píng)論中指出的那樣


Get-PSDrive | Select-Object *

這是更好的解決方案。


它將返回一個(gè) PSobjects 數(shù)組,其值作為注釋而不是腳本


using (var psCon = PowerShell.Create()){

    psCon.AddScript(@"

        Get-PSDrive | Select-Object *

    ");



    var psReturn = psCon.Invoke();

    foreach (var psObj in psReturn)

    {

        var driveUsedValue = psObj.Properties["Used"].Value;

    }

}

*注意該值將只是使用的字節(jié)整數(shù)。


查看完整回答
反對(duì) 回復(fù) 2022-12-24
  • 1 回答
  • 0 關(guān)注
  • 156 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)