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ù)。
- 1 回答
- 0 關(guān)注
- 156 瀏覽
添加回答
舉報(bào)