2014-12-01 88 views
0

作爲PowerShell的新手,我使用了這個腳本,它在使用'switch'時起作用。我嘗試使用'while'來工作,但是它的值是1還是0.雖然值是x

看看下面的腳本,有人能指出我哪裏出錯了!

您的幫助表示讚賞。

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(){ 
    [email protected]{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 
} 

回答

3

幾件事情在這裏:

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)

+1

此外,yaynay()中的'$ i'將會是可能包含'Y'或'N'的字符串。它永遠不會等於1或0.而奇怪的是,「yaynay」函數將刪除所有PSSession。看起來更好的方法是讓yaynay'return'成爲一個bool例如'if(yaynay){GetOut}'。 – 2014-12-02 02:50:19