Get-SmbAccess 的远程输出
Remote output from Get-SmbAccess
我有这个代码位,我正在尝试在脚本中工作:
$computers = Get-ADComputer -Filter * | Select-Object -ExpandProperty Name
$results = Invoke-Command -ComputerName $computers -ScriptBlock {Get-SmbShare | Get-SmbShareAccess}
我希望 return AccessRights 就好像是 运行 本地一样 - 但是这个 return 数字而不是文本。如访问权限'0'、'2'等
Name AccountName AccessRight
---- ----------- -----------
IPC$ BUILTIN\Administrators 0
IPC$ BUILTIN\Backup Operators 0
IPC$ NT AUTHORITY\INTERACTIVE 0
我该如何解决这个问题?
你为什么不试试:
$computers = (Get-ADComputer -Filter *).Name
$result = Get-SmbShare -CimSession $computers | Get-SmbShareAccess | Select-Object -Property Name, AccountName, AccessControlType, AccessRight, PSComputerName
注意:Select-对象是可选的。我用它来显示 PSComputerName 属性,以便识别哪台计算机提供输出
希望对您有所帮助!
由于 'AccessRight' 被定义为 'ScriptProperty',因此在访问时计算友好名称。也就是说,PowerShell 仅在您访问 属性 时查找它(例如,在构建 table 输出时)。使用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 cmdlet 在 运行 之前本地化它们远程强制加载必要的定义:
Get-SmbShare | Out-Null
Invoke-Command -ComputerName 'RemoteServer' -ScriptBlock {
Get-SmbShare | Get-SmbShareAccess
}
我有这个代码位,我正在尝试在脚本中工作:
$computers = Get-ADComputer -Filter * | Select-Object -ExpandProperty Name
$results = Invoke-Command -ComputerName $computers -ScriptBlock {Get-SmbShare | Get-SmbShareAccess}
我希望 return AccessRights 就好像是 运行 本地一样 - 但是这个 return 数字而不是文本。如访问权限'0'、'2'等
Name AccountName AccessRight
---- ----------- -----------
IPC$ BUILTIN\Administrators 0
IPC$ BUILTIN\Backup Operators 0
IPC$ NT AUTHORITY\INTERACTIVE 0
我该如何解决这个问题?
你为什么不试试:
$computers = (Get-ADComputer -Filter *).Name
$result = Get-SmbShare -CimSession $computers | Get-SmbShareAccess | Select-Object -Property Name, AccountName, AccessControlType, AccessRight, PSComputerName
注意:Select-对象是可选的。我用它来显示 PSComputerName 属性,以便识别哪台计算机提供输出
希望对您有所帮助!
由于 'AccessRight' 被定义为 'ScriptProperty',因此在访问时计算友好名称。也就是说,PowerShell 仅在您访问 属性 时查找它(例如,在构建 table 输出时)。使用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 cmdlet 在 运行 之前本地化它们远程强制加载必要的定义:
Get-SmbShare | Out-Null
Invoke-Command -ComputerName 'RemoteServer' -ScriptBlock {
Get-SmbShare | Get-SmbShareAccess
}