ネットワーク上のコンピュータの名前を変更するスクリプトがあります。私はそれを変更しようとしていますので、現在の名前とマシンの新しい名前を引数またはパラメータとして入力することができます(この場合は理にかなっています)。また、スクリプトで引数をチェックしてください存在しないCSVファイルをインポートします。PowerShellの引数またはパラメータ
これは私が思い付いたし、それが動作していないものです。 paramはコンソール出力から空に見えますが、IF文はまるでそうでないかのように動作します。
param (
$o = "oldname",
$n = "newname"
)
if(!($o = $null)){
if(!($n = $null)){
Write-Host "Renaming computer from: $o to: $n"
netdom renamecomputer $o /newName:$n /uD:domain\user /passwordD:* /force /reboot
}
}else{
Write-Host "Importing Computers from CSV file"
$csvfile = "C:\Sysinternals\rename.csv"
Import-Csv $csvfile | foreach {
$oldName = $_.OldName;
$newName = $_.NewName;
Write-Host "Renaming computer from: $oldName to: $newName"
netdom renamecomputer $oldName /newName:$newName /uD:domain\username /passwordD:* /force /reboot
}
}
これは、使用のために非常に近い理想的なケースである '[CmdletBinding()]'と '[パラメータ(必須= $真)]'や '[パラメータ( ValueFromPipeline = $ true)] 'となります。詳細については、[About_Functions_Advanced_Parameters](https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.core/about/about_functions_advanced_parameters)を参照してください。 (また、 'は、Get-ヘルプPowerShellコンソールでabout_Functions_Advanced_Parameters'またはISEで、この情報を得ることができます。) –
彼のスクリプトはパラメータが指定されていない場合は、CSVから新しいとOLDNAMEを輸入している@JeffZeitlin。なぜ彼は必須またはvaluefrompipeline属性を使用する必要がありますか? –
@MartinBrandl - 取得ポイント。私は実際には2つの方法のいずれかでこれを書き直してしまいます:(1)コンピュータ名を指定するときと、ファイルからインポートするとき(2)ValueFromPipelineの2つのパラメータセットそれは 'Import-CSV $ csvfile |このスクリプト。それはより柔軟になり(私は特定のCSVファイル名にロックされていません)、コードはおそらくデバッグがより簡単になります - 最初にデバッグが必要になるほどです。 –