PowerShell 配列の複数の入力メソッド
この要望はキャメロット社から出されたものです。Microsoft Cloud Solutions Exchange 236804566 premium group のユーザーの方々の貢献に感謝します。
まず、標準的な配列がどのように入力されるかを見てみましょう。
PS D:\> $arr= "adf","asdfer","sredsaf"
PS D:\> $arr
adf
asdfer
sredsaf
ここで注意すべきは、ダブルクォートとカンマで区切っていることです。言うまでもなく、これが最も簡単な入力方法ですが、使い勝手が悪く、ユーザー自身がPowerShellスクリプトを変更する必要があります
ユーザーが簡単に操作できるようにするために、次のような例を書きました。
$changdu = Read-Host("Please enter the length of the data in the array")
$s1= "@{"
for($x=0; $x -le $changdu-1; $x++)
{if($x -ne 0)
{
$servers = Read-Host('"Enter the name of the computer to add')
$s1 = $s1+$x+'="'+$servers+'";'
$s1
}
if($x -eq 0)
{
$servers = Read-Host('Enter first computer name')
$s1 = $s1+$x+'="'+$servers+'";'
$s1
}}
$s1 = '$arr='+$s1+"}"
$s1
echo xx |Out-File d:\3456.ps1
$files = (Get-Childitem d:\3456.ps1).pspath
clear-content $files
add-Content $files -Value "$s1"
実行すると、次のような結果になります。
Please enter the length of the data in the array: 4
Enter the first computer name: asdf
@{0="asdf";
"Enter the name of the computer to be added: ert
@{0="asdf";1="ert";
"Enter the name of the computer you want to add: 2345
@{0="asdf";1="ert";2="2345";
"Enter the name of the computer to add: gadf
@{0="asdf";1="ert";2="2345";3="gadf";
$arr=@{0="asdf";1="ert";2="2345";3="gadf";}
PS D:\> $arr=@{0="asdf";1="ert";2="2345";3="gadf";}
PS D:\> $arr
Name Value
---- -----
3 gadf
2 2345
1 ert
0 asdf
最終的に出力されるのは文ですが、文は配列ではなく文字列なので、別のファイルに出力して別途実行します。
$arr=@{0="asdf";1="ert";2="2345";3="gadf";} のようになります。
以下のコマンドを実行するだけです。もちろん、この行は上のスクリプトに追加することもできます。
powershell d:\3456.ps1
新しいファイルを作成する必要があり、効率が悪いという問題がありますが、ループを使うので、まだユーザーエクスペリエンスは良いので、気分転換にスプリット方式を試してみましょう。
$arr=(read-host("Please enter name of VM to be created, multiple VMs separated by commas in English state")).Split(',')
ここでは、データを分離して配列にするのに適したsplitメソッドが使用されています。splitメソッドについては、以下のリンクに詳しく書かれていますので、ここでは割愛します。
https://www.jb51.net/article/69147.htm
そうすると、上のスクリプトを修正して、splitメソッドを使用することもできます。この場合、現在のスクリプトで出力することができ、また、ユーザーがダブルクォートと
$changdu = Read-Host("Please enter the length of the data in the array")
$s1= ""
for($x=0; $x -le $changdu-1; $x++)
{if($x -ne 0)
{
$servers = Read-Host('"Enter the name of the computer to add')
$s1 = $s1+$servers+';'
$s1
}
if($x -eq 0)
{
$servers = Read-Host('Enter first computer name')
$s1 = $s1+$servers+';'
$s1
}}
$s2 = ($s1).Split(';')
echo $s2
また、.netのメソッドを使用してこれを処理する別の方法があり、これはビジュアルが悪いですが、うまく機能します。
$bb2= New-Object System.Collections.ArrayList
$bb2.Add("First")
$bb2.Add("second")
出力はこのようになり、この方法がよりシンプルであることがわかります。また、少し修正すれば、インタラクティブなエントリにすることも可能です。
PS D:\> $bb2
First
The second
要約すると、この問題を解決するには少なくとも4つの方法があるはずです。
1. 文字列をテキストに出力し、PowerShellで実行する xxx.ps1
2. splitメソッドで文字列を処理し、配列に切り出す
3, 相互作用のない直接的な1文の処理
4、netメソッド処理
この記事は "Nine Uncles - Microsoft Private Cloud" のブログから引用しています。
関連
-
PowerShellのジョブ関連コマンドとタスクの並列実行の解説
-
nugetパッケージのファイル消失問題を解決するためのpowershellスクリプトを追加しました。
-
PowerShell チュートリアル curl (Invoke-WebRequest) の使用方法について
-
特定のWebページに関する情報を取得するPowershellコード
-
PowerShell 5.0の新機能が公開されました。
-
CMDとWin powershellの違い
-
コンソールに緑のチェックマークを挿入するPowerShellの実装
-
コマンドライン履歴のコマンドをコピーするPowerShellメソッド
-
PowerShellによる印刷ジョブのクエリと削除のコード例
-
共有レジストリからユーザー設定を取得するためのPowershellスクリプト
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PowerShell スクリプト ランダムパスワードジェネレータ (ps random password generator)
-
PowerShellでの追加を解説
-
PowerShellを使用して、現在のホストメモリ使用量と合計を取得する方法
-
PowerShellによるファイル名変更のバッチ処理例
-
PowerShellにおける関数のオーバーロードの例
-
PowerShellで特殊記号をコンソールに出力する方法
-
PowerShellでF1ヘルプコマンドのアクセスをオンラインドキュメントに変更する方法
-
PowerShell ISEオートメーションの簡単な例
-
Powershell ISE 抽象構文木 プログラミング例
-
PowerShellで複数ファイルからキーワードを取得する