powershell如何找出变量是否是另一个变量的一部分

时间:2018-03-15 19:47:27

标签: powershell

我已粘贴下面的代码并删除了所有已经有效的代码,因此我只有那部分没有按预期工作。

我正在尝试将来自csv的EmployeeID放在AD中Description字段的前面。我可以让那部分工作,但If语句的开头,我试图检查描述中是否已经存在$ID失败;它只是在每次脚本运行时不断添加它。

我尝试将$ID$Description类型都设为Out-String字符串,我已将其保留,但结果相同。我尝试过-notcontains-notmatch-notlike(我认为这是正确的使用方法),但都没有效果。我甚至将我的变量放在一个文本文件中,以确保它们正在提取正确的信息。

我仍然在学习Powershell的所有复杂功能。谁能看到我做错了什么?

# Get script Start Time (used to measure run time)
$startDTM = (Get-Date)

#Null out variables
$Users = $Null
$ID = $Null

$Users = Import-Csv .\ImportADUsers\Test-Import-user-data.csv

Import-Module ActiveDirectory

$path = Split-Path -parent ".\ImportADUsers\*.*"

#Create log date
$logdate = Get-Date -Format yyyy-MM-dd-THH.mm.ss

$logfile = $path + "\logs\$logdate.logfile.txt"

# Enumerate the users, one line at a time.
# This assumes the first line is a header line defining the fields.
ForEach ($User In $Users)
{
    # Retrieve values from the csv.
    $ID = $User.HRRef

         # Retrieve the sAMAccountName of the user from AD.
    $UserDN = (Get-ADUser -LDAPFilter "(employeeID=$ID)").sAMAccountName
    $ID | Out-File $logfile -Append
    $IDString = $ID | Out-String

    #Retrieve the Description of the user from AD.
    $Description = Get-ADUser -Identity $UserDN -Properties description
    $Description = $Description.description | Out-String
    $Description | Out-File $logfile -Append

# Make sure there is only one user with this employeeID.
    If ($UserDN.Count -eq 1)
    {

       IF ($Description -notlike $IDString) {Set-ADUser -Identity $UserDN 
           -Description "$($ID) - $($Description)" } 

    }
    Else {"User with ID $ID either not found, or more than one user found." 
    | Out-File $logfile -Append}
    #Log error for users that are not in Active Directory or EmployeeID 
    #found more than once
}
#Finish
#The lines below calculates how long it takes to run this script
# Get End Time
$endDTM = (Get-Date)

# Echo Time elapsed
"Elapsed Time: $(($endDTM-$startDTM).totalminutes) minutes"

#Append the minutes value to the text file

"Import took $(($endDTM-$startDTM).totalminutes) minutes to complete." | 
 Out-File $logfile -Append
 #SCRIPT ENDS

1 个答案:

答案 0 :(得分:0)

您的字符串比较不正确。以下是如何修复它。

更改:-notlike $IDString => -notlike "*$ID*"

ForEach ($User In $Users)
{
    # Retrieve values from the csv.
    $ID = $User.HRRef
    $ID | Out-File $logfile -Append

    # Retrieve the SAMAccountName of the user from AD.
    $UserDN = (Get-ADUser -LDAPFilter "(employeeID=$ID)").SAMAccountName

    #Retrieve the Description of the user from AD.
    $Description = (Get-ADUser -Identity $UserDN -Properties description).Description
    $Description | Out-File $logfile -Append

    # Make sure there is only one user with this employeeID.
    If ($UserDN.Count -eq 1 -and $Description -notlike "*$IDString*")
    {
        Set-ADUser -Identity $UserDN -Description "$ID - $Description"
    }
    Else
    {
        "User with ID $ID either not found, or more than one user found." | Out-File $logfile -Append
    }
}