Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
powershell if语句未执行_Powershell_If Statement - Fatal编程技术网

powershell if语句未执行

powershell if语句未执行,powershell,if-statement,Powershell,If Statement,我正在尝试编写一个Powershell脚本来自动创建广告用户。我们是一个Linux/Windows混合环境,使用一个文本(现在是CSV)文件来跟踪旧的Linux UID#和用户名,这样它们就不会意外地被重复使用。我试图让我的脚本解析文件,但我似乎无法让比较工作 $sam = $GivenName.substring(0,1).ToLower() + $lastname.ToLower() $usernames=Import-csv "uid.csv" ForEach($users in $us

我正在尝试编写一个Powershell脚本来自动创建广告用户。我们是一个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}
if ($users.username -match $sam) {
  $uid = $true
}
它成功了。谢谢你的帮助


为了澄清一些混淆,$GivenName和$lastname是由用户输入的,我只是在寻找一个精确的匹配项,因为我试图避免重复使用用户名。此外,将-contains更改为-eq也同样有效。我已经为此奋斗太久了,如果你不知道我有点像Powershell noob。

你在
$users
中的循环中使用的循环变量,但是在循环中你使用
$usernames
。您可能想在if语句中使用
$users.username
,从您提供的信息来看有点不清楚,但我认为问题在于:由于$usernames来自CSV文件,因此$usernames.username是一个字符串。-contains运算符用于集合(如数组),并且仅在存在精确匹配时才起作用(如果您要查找精确匹配,则应使用-eq,但我假设这不是您想要的)。改为使用-match。另外,您正在为CSV中的每条记录设置$users,因此它应该是$users.username。将if语句更改为:

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

$GivenName
$lastname
来自哪里?也就是说,您确信
$sam
的值是正确的吗?这是一个更大的脚本(内部循环)的一部分,该脚本正在循环通过您从另一个源派生的用户集合?用户名列中存储的值是与
$sam
完全匹配还是部分匹配?请发布uid.csv的前几行,包括标题行。另外,如何分配$givenname和$lastname?请显示任何相关代码,并提供数据源示例,以便我们查看它们的外观。如果您正在执行
foreach($users in$usernames)
操作,则应在代码块中使用
$users
,而不是
$usernames
将$usernames.username更改为$users.username。username已修复此问题。在主要问题中有更多的评论。谢谢我甚至没有注意到,但这也是问题的一部分。但是,-contains也不起作用,除非它是完全匹配的,我假设这不是他所期望的,否则他会使用-eq。将$usernames.username更改为$users.username修复它。在主要问题中有更多的评论。谢谢将$usernames.username更改为$users.username修复了此问题。在主要问题中有更多的评论。谢谢