gpt4 book ai didi

其他用户的 Powershell gwmi

转载 作者:行者123 更新时间:2023-12-02 23:43:54 25 4
gpt4 key购买 nike

我正在尝试为机器上的用户收集用户配置文件信息,我想知道是否可以使用 gwmi 获取它。以下是我为当前用户获取打印机的方法:Get-WmiObject win32_printer .如何在同一台机器上为用户“测试”获取相同的信息?

最佳答案

碰巧,我睡不着,所以我想出了这两个功能:

function Get-UserSid {
[CmdletBinding()]
param(
[Parameter(
ParameterSetName='NTAccount',
Mandatory=$true,
ValueFromPipeline=$true,
Position=0
)]
[System.Security.Principal.NTAccount]
$Identity ,

[Parameter(
ParameterSetName='DomainAndUser',
Mandatory=$true
)]
[ValidateNotNullOrEmpty()]
[ValidatePattern('^[^\\]+$')]
[String]
$Domain ,

[Parameter(
ParameterSetName='DomainAndUser',
Mandatory=$true
)]
[ValidateNotNullOrEmpty()]
[ValidatePattern('^[^\\]+$')]
[String]
$User
)

Begin {
if ($PSCmdlet.ParameterSetName -eq 'DomainAndUser') {
$Identity = New-Object System.Security.Principal.NTAccount -ArgumentList $Domain,$User
}
}

Process {
$Identity.Translate([System.Security.Principal.SecurityIdentifier])
}
}

function Get-PrinterNameByUser {
[CmdletBinding(DefaultParameterSetName='Ambiguous')]
param(
[Parameter(
ParameterSetName='ByAccount',
Mandatory=$true
)]
[System.Security.Principal.NTAccount]
$Account ,

[Parameter(
ParameterSetName='BySID',
Mandatory=$true
)]
[System.Security.Principal.SecurityIdentifier]
$SID ,

[Parameter(
ParameterSetName='Ambiguous',
Mandatory=$true,
Position=0,
ValueFromPipeline=$true
)]
[ValidateNotNullOrEmpty()]
[String]
$Identity
)

Begin {
Write-Verbose "Parameter Set Name: $($PSCmdlet.ParameterSetName)"
if ($PSCmdlet.ParameterSetName -eq 'ByAccount') {
$SID = $Account | Get-UserSid
}
}

Process {
if ($PSCmdlet.ParameterSetName -eq 'Ambiguous') {
try {
$SID = [System.Security.Principal.SecurityIdentifier]$Identity
} catch [System.InvalidCastException] {
$Account = [System.Security.Principal.NTAccount]$Identity
$SID = $Account | Get-UserSid
}
}
Get-ChildItem -Path "Registry::\HKEY_Users\$($SID.Value)\Printers" | Select-Object -ExpandProperty Property -Unique
}

}

用法

Get-PrinterNameByUser Test
Get-PrinterNameByUser 'domain\test'
Get-PrinterNameByUser 'S-1-S-21-65454546-516413534-4444'

所有这些也可以通过管道传输:

'Test' | Get-PrinterNameByUser
'domain\test' | Get-PrinterNameByUser
'S-1-S-21-65454546-516413534-4444' | Get-PrinterNameByUser

'S-1-S-21-65454546-516413534-4444','user1','machine\user2','domain\user3' | Get-PrinterNameByUser

解释

在注册表中 HKU\S-ID-HERE\Printers有一些带有属性的键。属性名称是打印机。我无法在足够多的机器上对此进行测试,所以我不确定应该检查哪些键,以及它们是否会有所不同,具体取决于它是本地打印机还是网络打印机等,所以我m 只是从所有键中获取属性并返回唯一的。

辅助函数 Get-UserSid只是提供了一种从用户名中获取 SID 的便捷方式。

大部分 Get-PrinterNameByUser只是代码来找出你给它的东西并在需要时翻译它。返回您想要的内容的内容只是一行:

Get-ChildItem -Path "Registry::\HKEY_Users\$($SID.Value)\Printers" | Select-Object -ExpandProperty Property -Unique

关于其他用户的 Powershell gwmi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31634372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com