2016-12-01 18 views
1

我是相當新的PowerShell的,但我已經創建了一個XAML的形式做一些健康對我們的環境檢查。在第一部分中,我創建了一條if語句來檢查設備的連接狀態。設備名稱從TextBox中提取,然後,如果連接了該設備,則繼續運行狀況檢查。但是,當物品從TextBox拉出時,它包含該行的「n」,因此查詢失敗。下面是相關代碼...變量在PowerShell中,包括新行字符

Remove-Item C:\Healthlog.txt 
#This is where the problem is happening 
$Computers = $CompNames.Text.Split("`n") 

Foreach ($Comp in $Computers){ 

    $log= "C:\Healthlog.txt" 
    Add-Content $log "$Comp" 

    #Check to see if machines are connected 
    Write-Host "$TestConnection = Test-Connection -ComputerName $Comp - Quiet" 
    $TestConnection = Test-Connection -ComputerName $Comp -Quiet 
    Write-Host $TestConnection 
    If ($TestConnection -eq $False) { 
    Add-Content $log "Connection to Device has failed" 
    } 

$CompnamesTextBox已經被分配給變量的名稱。

輸出是一個失敗的查詢每次都因爲被包含在變量的新行字符。我曾嘗試在$Comp以及$Computers上做-replace,但我不知道我是否正確地做了這件事。

任何幫助將不勝感激。

回答

0

注意:此命令的輸出:

("1`n2`n").Split("`r`n").Count 

輸出是3因爲第三行是空的。你可以通過忽略空條目(我認爲是你想要的)來解決這個問題:

$CompNames.Text.Split("`r`n", [StringSplitOptions]::RemoveEmptyEntries) 
0

你確定這是一個剛剛被搞亂了一個換行符價值?你是否嘗試過更換制動器返回?

$Computers = $CompNames.Text.Split("`n") 
Foreach ($Comp in $Computers) 
{ 

    $newComp = $Comp.Replace("`n", "").Replace("`r", "") 

    $log= "C:\Healthlog.txt" 
    Add-Content $log "$newComp" 

    #Check to see if machines are connected 
    Write-Host "$TestConnection = Test-Connection -ComputerName $newComp - Quiet" 
    $TestConnection = Test-Connection -ComputerName $newComp -Quiet 
    Write-Host $TestConnection 
    If ($TestConnection -eq $False) { 
    Add-Content $log "Connection to Device has failed" 
} 
0

所以根據這裏的兩個註釋我得到了代碼的功能。這是空的條目和回車問題。最終的代碼最終看起來像這樣。

$Computers = $CompNames.text.split("`n", [StringSplitOptions]::RemoveEmptyEntries) | % { $_.replace("`r", "") } 
+0

Shorter簡單地說是'$ CompNames.text.split(「\'r \'n」,[StringSplitOptions] :: RemoveEmptyEntries)'。更新我的答案以包含'\'r'。 –

+0

工程就像一個魅力。謝謝! – dbennett