powershell if语句未执行

时间:2013-08-15 17:12:41

标签: powershell if-statement

我正在尝试编写一个Powershell脚本来自动创建AD用户。我们是一个混合的Linux / Windows环境,使用文本(现在是CSV)文件来跟踪旧的Linux UID#和用户名,这样它们就不会被意外重用。我正在尝试让我的脚本解析文件,但我似乎无法进行比较。

$sam = $GivenName.substring(0,1).ToLower() + $lastname.ToLower()
$usernames=Import-csv "uid.csv" 
ForEach($users in $usernames){
if($usernames.username -contains $sam){$uid = $true}
}

我已经使用了几种不同的方法,我从网上找到了从文件中读取数据到数组但问题似乎是无论如何,它永远不会设置$ uid = $ true和我不明白为什么。

编辑: 我将if语句更改为:

if($users.username -contains $sam){$uid = $true}

它有效。谢谢你的帮助!

为了消除一些困惑,$ GivenName和$ lastname是由用户输入的,我只是在寻找完全匹配,因为我试图避免重复使用的用户名。此外,将-contains更改为-eq也可以。我已经为WAY打了太长时间,如果你不能说我有点像一个Powershell菜鸟。

2 个答案:

答案 0 :(得分:1)

您在$users循环中使用的循环变量,但在您使用$usernames的循环中。您可能希望在if语句中使用$users.username

答案 1 :(得分:1)

根据您提供的信息有点不清楚,但我认为这就是问题:由于 $ usernames 来自CSV文件, $ usernames.username 是一个字符串。 -contains 运算符用于集合(例如数组),并且只有在完全匹配时才会起作用(如果您要查找完全匹配,则应使用 -eq < / strong>,但我认为这不是你想要的)。请改用 -match 。此外,您要为CSV中的每条记录设置 $ users ,因此它应为 $ users.username 。将 if 语句更改为:

if ($users.username -match $sam) {
  $uid = $true
}