如何解决Powershell-属性表达
我不知道如何在属性声明中添加表达式。 我创建了一个脚本来获取服务器上的本地管理员成员,并且工作正常。 现在,我想添加另一个属性,该属性应检查“管理员”属性中指定的用户是否已启用,因此我添加了“用户已启用”属性,但未显示任何内容
Foreach ($server in $servers){
Try{
$admins = Gwmi win32_groupuser –computer $server -Erroraction Stop
$admins = $admins |? {$_.groupcomponent –like '*"Administrators"'}
$admins = $admins |% { $_.partcomponent –match “.+Domain\=(.+)\,Name\=(.+)$” > $nul
$matches[1].trim('"') + “\” + $matches[2].trim('"') | Where-Object {$_ -like "$domain*" -and $_ -notlike "*Domain Admins*"}}
foreach ($admin in $admins){
# remove domain name
$username = $admin.Split('\')[1]
# Create properties
$administratorProperties = @{
"Administrators" = $admin
"Local Admin type" = "Domain users"
"Machine name" = $server
# check if local admin is enabled or not in AD
Label ="User Enabled" ; expression = {(Get-AdUser -Filter "SamAccountName -eq '$userName'").Enabled}
}
$adm += New-Object psobject -Property $administratorProperties
}
$adm | Select "Machine Name","Administrators","Local Admin type","User Enabled" | Export-CSV "C:\Temp\LOcalAdmins.CSV" –NoTypeInformation
}
catch [Exception]
{
if ($_.Exception.GetType().Name -like "*COMException*") {
Write-Verbose -Message ('{0} is unreachable' -f $server) -Verbose
}
else{
Write-Warning $Error[0]
}
}
}
Machine name : MACHINE
Administrators : DOMAIN\User1
Label : User Enabled
Local Admin type : Domain users
expression : (Get-AdUser -Filter "SamAccountName -eq '$userName'").Enabled
是否可以检查$ username变量中的用户是否启用。
解决方法
属性表达式是用于动态计算属性值的-不需要,因为您正在构造具有所有属性值的对象,因此您要做的就是将属性值分配给相关的键在哈希表中按原样:
$administratorProperties = @{
"Administrators" = $admin
"Local Admin type" = "Domain users"
"Machine name" = $server
# check if local admin is enabled or not in AD
"User Enabled" = (Get-AdUser -Filter "SamAccountName -eq '$userName'").Enabled
}
$adm += New-Object psobject -Property $administratorProperties
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。