Loops 而值是x

Loops 而值是x,loops,powershell,while-loop,return-value,Loops,Powershell,While Loop,Return Value,作为PowerShell的新手,我有一个使用“switch”时可以使用的脚本。我尝试使用“while”使其工作,但无论值是1还是0,它都会退出 看看下面的脚本,有人能告诉我哪里出了问题 谢谢你的帮助 cls Import-Module -Name ActiveDirectory $ADpath = "OU=OU1,DC=DC1,DC=DC2,DC=DC3"; $i = 0 function yaynay(){ $i = Read-Host "`nSearch again.." "Y `

作为PowerShell的新手,我有一个使用“switch”时可以使用的脚本。我尝试使用“while”使其工作,但无论值是1还是0,它都会退出

看看下面的脚本,有人能告诉我哪里出了问题

谢谢你的帮助

cls
Import-Module -Name ActiveDirectory
$ADpath = "OU=OU1,DC=DC1,DC=DC2,DC=DC3";
$i = 0

function yaynay(){
    $i = Read-Host "`nSearch again.." "Y `tOR N";
    switch -Regex ($i.ToUpper()){
        "Y(es)?"{$i -eq 1}
        default {$i -eq 0}
    }
    get-pssession | remove-pssession
}

function TableFormat(){
    $x1=@{label='Full Name';Expression={$_.name};width=20},
    @{label='Login Name';Expression={$_.samaccountname};width=15},
    @{label='OU';Expression={(($_.DistinguishedName -split "=",4)[3] -split ",",2[0]};width=15}
    $ADusr | Format-Table $x1
}

function getOut(){
    Write-Host "AD Search will now exit"
    exit
}

function ADUwrite (){
    Write-Output "`n Cannot find user:  $InputUsr"
}

while ($i -lt 1)
{
    $InputUsr = Read-Host "Enter One or More Letters To Search For User"
    $InputUsr1 = $InputUsr

    if($InputUsr -eq ""){
        write "`n No Search Criteria Entered... Exiting AD User Search"
        exit
    }

    $InputUsr = "*"+$InputUsr+"*"

    if([string]$InputUsr1 -contains "*"){
        $InputUsr = $InputUsr.Replace($InputUsr, $InputUsr1)
    }

    $ADusr = Get-ADUser -Filter {name -like $InputUsr} -SearchBase $ADpath
    $x=$ADusr.name.length

    if($x -gt 0){
        TableFormat
    }
    else{
        $InputUsr = $InputUsr1.ToUpper()
        ADUwrite $InputUsr
    };

    yaynay($i)
    if($i = 1){
        GetOut
    }

    Get-PSSession | Remove-PSSession
}
这里有几件事:

function yaynay(){
    $i = Read-Host "`nSearch again.." "Y `tOR N";
    switch -Regex ($i.ToUpper()){
        "Y(es)?"{$i -eq 1}
        default {$i -eq 0}
    }
    get-pssession | remove-pssession
}
变量
$i
是此函数的本地变量,因此它的值永远不会返回,因此不会影响外部发生的任何事情

yaynay($i)
您不需要使用括号来调用Powershell函数(尽管您确实需要调用方法),在这里这无关紧要,因为它只是将数字0作为参数传递,但是如果您尝试使用多个参数,则最终会传递一个数组
yaynay
没有定义任何参数,因此它将忽略该参数

if($i = 1){
    GetOut
}
将值
1
分配给变量
$i
。这总是正确的,因此您将始终调用
GetOut
。比较应该是
if($i-eq 1)

这里有几件事:

function yaynay(){
    $i = Read-Host "`nSearch again.." "Y `tOR N";
    switch -Regex ($i.ToUpper()){
        "Y(es)?"{$i -eq 1}
        default {$i -eq 0}
    }
    get-pssession | remove-pssession
}
变量
$i
是此函数的本地变量,因此它的值永远不会返回,因此不会影响外部发生的任何事情

yaynay($i)
您不需要使用括号来调用Powershell函数(尽管您确实需要调用方法),在这里这无关紧要,因为它只是将数字0作为参数传递,但是如果您尝试使用多个参数,则最终会传递一个数组
yaynay
没有定义任何参数,因此它将忽略该参数

if($i = 1){
    GetOut
}
将值
1
分配给变量
$i
。这总是正确的,因此您将始终调用
GetOut
。比较应该是
if($i-eq 1)

这里有几件事:

function yaynay(){
    $i = Read-Host "`nSearch again.." "Y `tOR N";
    switch -Regex ($i.ToUpper()){
        "Y(es)?"{$i -eq 1}
        default {$i -eq 0}
    }
    get-pssession | remove-pssession
}
变量
$i
是此函数的本地变量,因此它的值永远不会返回,因此不会影响外部发生的任何事情

yaynay($i)
您不需要使用括号来调用Powershell函数(尽管您确实需要调用方法),在这里这无关紧要,因为它只是将数字0作为参数传递,但是如果您尝试使用多个参数,则最终会传递一个数组
yaynay
没有定义任何参数,因此它将忽略该参数

if($i = 1){
    GetOut
}
将值
1
分配给变量
$i
。这总是正确的,因此您将始终调用
GetOut
。比较应该是
if($i-eq 1)

这里有几件事:

function yaynay(){
    $i = Read-Host "`nSearch again.." "Y `tOR N";
    switch -Regex ($i.ToUpper()){
        "Y(es)?"{$i -eq 1}
        default {$i -eq 0}
    }
    get-pssession | remove-pssession
}
变量
$i
是此函数的本地变量,因此它的值永远不会返回,因此不会影响外部发生的任何事情

yaynay($i)
您不需要使用括号来调用Powershell函数(尽管您确实需要调用方法),在这里这无关紧要,因为它只是将数字0作为参数传递,但是如果您尝试使用多个参数,则最终会传递一个数组
yaynay
没有定义任何参数,因此它将忽略该参数

if($i = 1){
    GetOut
}

将值
1
分配给变量
$i
。这总是正确的,因此您将始终调用
GetOut
。比较应该是
如果($i-eq 1)

同样,yaynay()中的
$i
将是可能包含“Y”或“N”的字符串。它永远不会等于1或0。奇怪的是,一个“yaynay”函数会删除所有的PSSessions。似乎更好的方法是让yaynay
返回一个bool,例如
if(yaynay){GetOut}
。另外,yaynay()中的
$i
将是可能包含“Y”或“N”的字符串。它永远不会等于1或0。奇怪的是,一个“yaynay”函数会删除所有的PSSessions。似乎更好的方法是让yaynay
返回一个bool,例如
if(yaynay){GetOut}
。另外,yaynay()中的
$i
将是可能包含“Y”或“N”的字符串。它永远不会等于1或0。奇怪的是,一个“yaynay”函数会删除所有的PSSessions。似乎更好的方法是让yaynay
返回一个bool,例如
if(yaynay){GetOut}
。另外,yaynay()中的
$i
将是可能包含“Y”或“N”的字符串。它永远不会等于1或0。奇怪的是,一个“yaynay”函数会删除所有的PSSessions。似乎更好的方法是让yaynay
返回一个bool,例如
if(yaynay){GetOut}