2016-01-20 58 views
0

我想用.startswith來填充$ targetdb,但它不會填充。我也嘗試使用-match運算符,但仍然沒有運氣。我只需要用戶填寫姓氏的第一個字符。任何幫助將非常感謝你。不會爲表達式增加值

$lastname = "$($_.Surname)" 

$region = Read-Host 'Region? (CR, XR, SR, CHI)' 
If ($region -match "CR") {$office = "CR*"} 
ElseIf ($region -match "SR") {$office = "SR*"} 
ElseIf ($region -match "XR") {$office = "CR XR"} 
ElseIf ($region -match "CHI") {$office = "NR*"} 
Else {Write-Error 'Enter Correct Parameter!'} 
$depart = Read-Host 'Department Name?' 
If ($lastname.StartsWith("R-Z")) {$TargetDB = "$crmbxdb3"} 
$filter = "department -like ""$depart"" -and Enabled -eq ""True"" -and office -like ""$office""" 
$output = Get-ADUser -Filter $filter | Format-Table @{label="EmailAddress";expression={$_.UserPrincipalName}}, @{label="LastName";expression={$_.Surname}}, @{label="TargetDatabase";expression={$TargetDB}} | Out-String 
$output 
+0

在分配$姓氏,你的語法更改爲:$姓= $ _姓或$姓=「$($ _。姓)」。當前語法在訪問Surname屬性之前展開$ _。您也不必在If語句中用引號包圍$ lastname。 – dugas

+0

這沒有奏效,結果相同。我從來沒有得到任何錯誤,所以它很難調試。 – Colby

回答

0

你試過

If ("$lastname".StartsWith("R")) {$TargetDB = "$crmbxdb3"} 

,而不是

If ("$lastname".StartsWith("R")) {$TargetDB = "$crmbxdb3"}** 

它爲我的作品...

也試試這個:If ($lastname.StartsWith("R")) {$TargetDB = "$crmbxdb3"}爲$跳過報價姓氏

+0

是的。 **是一個錯字抱歉。沒有工作。 – Colby

+0

我假設問題是即使$ lastname以「R-Z」開頭,$ TargetDB變量沒有被填充$ crmbxdb3的值?您是否嘗試在代碼中添加Write-Host $ TargetDB之類的東西,以查看執行過程中變量的值?您還可以使用PowerGUI腳本編輯器來幫助您調試代碼 – Maaykel

+0

謝謝,是的,我希望$ targetdb等於基於$ lastname開頭的字母的數據庫。我已將我的代碼更新爲我目前擁有的代碼,但我什麼都沒有收到。 「.StartsWith」似乎沒有工作,我也嘗試過,也是一樣,我什麼也沒得到。如果我把如果$姓氏=「瑞安」它工作得很好。 – Colby

2

"$lastname".StartsWith("R-Z")可能沒有達到你期望的效果 - 它測試字符串是否以三個字符「R」,「 - 」和「Z」開頭。

如果你想測試一個字符範圍,使用-match

if($lastname -match "^[r-z]") { $TargetDB = "$crmbxdb3" } 
+0

if($ lastname -match「^ [r-z]」){$ TargetDB =「$ crmbxdb3」}給了我相同的結果,沒有任何結果。 – Colby

+0

你是否證實'$ lastname'的值確實是你期望的值? –