【发布时间】:2013-09-10 16:49:25
【问题描述】:
我正在尝试编写一个脚本来从服务器检索登录用户的用户名,(这是一个使用未格式化字符串数据的练习,我知道其他获取此数据的方法,所以请不要建议他们)
我正在尝试将 WMI 查询中的数字字符串传递到 where-object 过滤器 这是从 Win32_LoggedOnUser 类读取 WMI 输出
$Name | where {$_.Dependent -like $ID } | select Antecedent
问题似乎在于读取 ID 变量,我尝试了几种变体,这是一个与过滤器格式的一些通配符连接的值,当我将字符串转换为 CSV 格式时,我得到了提示,所以我可以更轻松地执行 [regex]::Split,我收到 InputObject 为空的错误,如果我单独运行上面的行,我只会得到空结果,如果我手动输入过滤器字符串,我会得到我想要的输出。
[String]$ID = "'*"+$UserSessions.LogonId+"*'"
如果我做一个 write-host,我只会返回 '146771' 这似乎是我想要的,并且 get-member 显示它是一个 [System.String]
然后我将其扔到一个拆分中,该拆分抓取最后一个标记,即用户名,如果我手动输入过滤器字符串而不是我尝试过的任何格式的变量,整个脚本都可以正常工作
${ID} ($ID) ""$ID"" $($ID)
这是完整的脚本供参考
$UserSessions = GWMI Win32_LogonSession | where { $_.LogonType -eq 2}
[String]$ID = "'*"+$UserSessions.LogonId+"*'"
$Name = GWMI Win32_LoggedOnUser
$Results = $Name | where {$_.Dependent -like $ID } | select Antecedent
$Split = $Results | ConvertTo-Csv
$Splat = [regex]::Split($Split, """")[9]
Write-Host "User = $Splat"
【问题讨论】:
标签: powershell conditional-statements