2017-06-11 3 views
2

Ich habe dieses SkriptPowershell Try Catch and Retry?

#Change hostname 
[void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') 
Write-Host "Change hostname " -NoNewLine 
$ComputerName = [Microsoft.VisualBasic.Interaction]::InputBox('Insert the desired computername:', 'Change hostname') 
Write-Host "- DONE" -ForegroundColor DarkGreen -BackgroundColor green -NoNewline 
Write-Host " hostname = $ComputerName " 
Rename-Computer -NewName $ComputerName 

, wenn der Computername Leerzeichen wird, schlägt es nämlich zu einem Hostnamen kippen Räume haben. kann ich die Form blockieren alle Leerzeichen zu haben, oder hat jemand weiß, wie man zurück zum inputbox zu erhalten, wenn ein Fehler für einen erneuten Versuch

Antwort

4
do { 
    $ComputerName = [Microsoft.VisualBasic.Interaction]::InputBox('Insert the desired computername:','Change hostname') 
} while ($ComputerName -match "\s") 

mit einer do{}while() Schleife und die Eingangsprüfung nicht erstellt wurde hat keine Leerzeichen sollen Ihr Problem beheben, wird dies erneut Aufforderung, bis ein gültiger Hostname eingegeben wird, wenn Sie überhaupt für Fehler überprüfen mögen:

do{ 
    $Failed = $false 
    Try{ 
     $ComputerName = [Microsoft.VisualBasic.Interaction]::InputBox('Insert the desired computername:', 'Change hostname') 
     Write-Host "- DONE" -ForegroundColor DarkGreen -BackgroundColor green -NoNewline 
     Write-Host " hostname = $ComputerName " 
     Rename-Computer -NewName $ComputerName -ErrorAction Stop 
    } catch { $Failed = $true } 
} while ($Failed) 
+0

Versuchte die erste Methode und das war mehr als ok. Die zweite Methode Ich kann den Code nicht ausführen, wie es sollte, könnten Sie mir ein Beispiel geben? Ich mag die zweite Arbeit, weil ich mehr von dieser Art von Skripten wie – IIIdefconIII

+0

@ThomasvanDalen dort mit Ihrem Code in das zweite Bit aktualisiert habe, das sollte für Sie ok laufen. – ConnorLSW

+0

TY aber es funktioniert nicht, wenn es ein Leerzeichen ist ein Fehler fällt aber die Eingabebox doenst wieder zu versuchen – IIIdefconIII

0

Sehr zufrieden mit dem Endergebnis, vielen dank

#Change hostname 
Write-Host "Change hostname " -NoNewLine 
do{ 
    $Failed = $false 
    Try{ 
     $ComputerName = [Microsoft.VisualBasic.Interaction]::InputBox('Insert the desired computername:', 'Change hostname') 
     Rename-Computer -NewName $ComputerName -ErrorAction Stop 
     Write-Host "- DONE -" -ForegroundColor DarkGreen -BackgroundColor green -NoNewline 
     Write-Host "Hostname = $ComputerName" -ForegroundColor DarkGreen -BackgroundColor yellow 
    } catch { $Failed = $true } 

} while ($Failed) 

#Change workgroupname 
Write-Host "Change Workgroup " -NoNewLine 
do{ 
    $Failed = $false 
    Try{ 
     $WorkGroup = [Microsoft.VisualBasic.Interaction]::InputBox("Insert the Workgroupname:", 'Change WorkGroupName', 'werkgroep') 
     Add-Computer -WorkGroupName $WorkGroup -ErrorAction Stop 
     Write-Host "- DONE -" -ForegroundColor DarkGreen -BackgroundColor green -NoNewline 
     Write-Host "Workgroup = $WorkGroup" -ForegroundColor DarkGreen -BackgroundColor yellow 
    } catch { $Failed = $true } 
} while ($Failed)