簡體   English   中英

解決AD用戶時出現參數錯誤

[英]Parameter error when resolving AD user

我正在嘗試解決以下腳本為什么會出錯的問題。 我應該通過說腳本可以正確輸出和起作用,但是總是以相同數量的錯誤作為前綴來聲明該語句。

正在使用的CSV文件是自動生成的,並且標題不在第一行,這就是為什么我必須跳過前4行。

這是腳本:

# Getting the name of PCs in the DNS column.
$data = Get-Content -Path c:\admin\scripts\windows\test.csv |
        Select-Object -Skip 4 |
        Out-String |
        ConvertFrom-Csv |
        Select-Object -Property DNS -Unique

$dns = $data.DNS

# REMOVES DOMAIN NAME AND LEAVES JUST THE HOST/USERNAME
[regex]$myregex = "\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S$"

$dns2 = foreach ($DNS in $dns) {
    $myregex.split($dns)
}

$getemail = foreach ($DNS in $dns2) {
    Get-ADUser $DNS -Properties mail | Select-Object -Property mail -Unique
}

Send-MailMessage -Attachments c:\admin\scripts\windows\test.csv -From admin@mydomain.com -To $getemail.mail -Subject "UPDATES OF NON-SUPPORTED APPLICATIONS REQUIRED" -SmtpServer smtp.mydomain.com

這將獲取用戶的電子郵件地址,並將報告的副本發送給每個用戶。 它實際上可以工作,但是對於每個正確的電子郵件地址,都有一個相應的錯誤:

Get-ADUser : Cannot bind parameter 'Identity' to the target. Exception 
setting "Identity": "Cannot validate argument on parameter: 'Identity'. The 
argument is null or empty.

Supply an argument that is not null or empty and then try the command again.

我只想停止錯誤,以避免對其他運行此腳本的人造成混淆。

您的輸入文件包含不存在的用戶身份。 要讓Get-ADUser跳過它們而不會抱怨,請使用-Filter而不是隱式的-Identity

Get-ADUser -Filter "SamAccountName -eq '$DNS'" -Properties mail |
  Select-Object -Property mail -Unique

或者,如果您不確定確切匹配哪個屬性,請使用-LDAPFilter歧義名稱解析

Get-ADUser -LDAPFilter "(anr=$DNS)" -Properties mail |
  Select-Object -Property mail -Unique

編輯:要提取字符串中連字符之前的部分,最好執行以下操作:

$getemail = $data.DNS | ForEach-Object {
  $_ -replace '-.*'
} | ForEach-Object {
  Get-ADUser -LDAPFilter "(anr=$_)" -Properties mail |
    Select-Object -Property mail -Unique
}

有關代碼其余部分的一些其他注釋。 第一個foreach循環將相同的變量用於循環變量和元素列表:

$dns2 = foreach ($DNS in $dns) {
    $myregex.split($dns)
}

不要那樣做 PowerShell變量名稱不區分大小寫。

還有,你的正則表達式

[regex]$myregex = "\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S\S$"

可以這樣簡化:

[regex]$myregex = "\S{16}$"

或者(如果您不關心確切的字符數),例如:

[regex]$myregex = "\S+$"

再次感謝您,安斯加爾!

經過一些調整后,我將您的建議合並到了腳本中,這是現在可以完美運行的建議:

$data = Get-Content -path c:\admin\scripts\windows\test.csv | select-object` 
-skip 4 | Out-String | ConvertFrom-Csv | select-object -property DNS -unique

$getuser = $data.dns | ForEach-Object {$_ -replace '-.*'}

$getemail = foreach($dns in $getuser) {get-aduser -filter "(samaccountname` 
-eq '$dns')" -properties mail | select-object -property mail -unique} 

send-mailmessage -attachments c:\admin\scripts\windows\test.csv` 
-from admin@mydomain.com -to $getemail.mail`
-subject "UPDATES OF NON-SUPPORTED APPLICATIONS REQUIRED"`
-smtpserver smtp.mydomain.com

感謝您的協助!

傑西

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM