Поскольку «AccessRight» определен как «ScriptProperty», понятное имя вычисляется во время доступа.То есть PowerShell ищет его только при доступе к свойству (например, при построении вывода таблицы).Используйте Get-Member
, чтобы увидеть определение:
Get-SmbShare | Get-SmbShareAccess | Get-Member | Format-List *
TypeName : Microsoft.Management.Infrastructure.CimInstance#ROOT/Microsoft/Windows/Smb/MSFT_SmbShareAccessControlEntry
Name : AccessRight
MemberType : ScriptProperty
Definition : System.Object AccessRight {get=[Microsoft.PowerShell.Cmdletization.GeneratedTypes.SmbShare.ShareAccessRight]
($this.PSBase.CimInstanceProperties['AccessRight'].Value);}
Поскольку информация, необходимая для его преобразования, не загружается локально по умолчанию при выполнении удаленных вызовов, PowerShell может отображать только необработанное целочисленное значение:
TypeName : Microsoft.Management.Infrastructure.CimInstance#ROOT/Microsoft/Windows/SMB/MSFT_SmbShareAccessControlEntry
Name : AccessRight
MemberType : Property
Definition : uint32 AccessRight {get;}
Вы могли бы написать некоторый код для его преобразования (скажем, как другое вычисляемое свойство), или быстрый взлом состоял бы в том, чтобы запустить командлеты SMB локально, прежде чем запускать их удаленно, чтобы принудительно загрузить необходимые определения:
Get-SmbShare | Out-Null
Invoke-Command -ComputerName 'RemoteServer' -ScriptBlock {
Get-SmbShare | Get-SmbShareAccess
}