1

Powershell スクリプトを使用してテキスト ファイルに書き込みます。クライアントは、以前使用していた Excel マクロを置き換えるために使用するこの Powershell スクリプトを見せてくれました...

$computers= gc "C:\Users\Powershell\DeviceList.txt"
foreach ($computername in $computers)
{
write-output "<$computername>
      active = yes
      group = 
      interval = 5min
      name = $computername
      host = $computername
      community = 
      version = 1
      timeout = 0
      retries = default
      port = 161
      qos_source = 1
</$computername>"  | Out-File -filepath "C:\Users\Powershell\Cisco_Mon.txt" -append
}

それはうまく機能しますが、追加の変数を追加するためにそれを構築したいと思いました。完璧な世界では、データの各行と変数として定義されている各列を取得する Excel スプレッドシートから読み取りたいと思います。今のところ、別のテキスト ファイルを使用しても問題ありません。これが私が始めたものです(うまくいきません)が、私がどこに向かっているのかを見ることができます...

$computers= gc "C:\Users\Powershell\devicelist.txt"
$groups= gc "C:\Users\Powershell\grouplist.txt"
foreach ($computername in $computers) + ($groupname in $groups)
{
write-output "<$computername>
      active = yes
      group = $groupname
      interval = 5min
      name = $computername
      host = $computername
      community = 
      version = 1
      timeout = 0
      retries = default
      port = 161
      qos_source = 1
</$computername>"  | Out-File -filepath "C:\Users\Powershell\Cisco_Mon.txt" -append
}

もちろん、それは機能していません。上記の各オプションを、$community、$interval、$active などの Excel スプレッドシートの変数に定義できれば、基本的には大好きです。

これに関するヘルプは非常に高く評価されます。誰かが Excel スプレッドシートの使用方法を教えてくれ、各列を変数として定義し、上記のテキストを変数で書き込めたら、それは素晴らしいことです!!!.

ありがとう、

smt1228@gmail.com

これの例は次のようになります...

Excel データ: (「|」で区切られた列

IP | String | Group
10.1.2.3 | Public | Payless

望ましい出力:

<10.1.2.3>
      active = yes
      group = Payless
      interval = 5min
      name = 10.1.2.3   
      host = 10.1.2.3   
      community = 
      version = 1
      timeout = 0
      retries = default
      port = 161
      qos_source = 1
</10.1.2.3>

添加:

IP、文字列、グループのCSVからデータを取得しています.CSVではデータは次のとおりです...

10.1.2.3,public,group1
10.2.2.3,default,group2
10.3.2.3,public,group3
10.4.2.3,default,group4

として.txtファイルに書き込まれます

IP = 10.1.2.3.
String = public
Group = Group1

CSVの各行を探します

4

1 に答える 1

0

わかりました、今新しい答え。最も簡単な方法は、Excel ドキュメントを CSV として保存して、次のようにすることです (つまり、上記のデータの提示方法と非常によく似ています)。

IP,String,Group
10.1.2.3,Public,Payless

これも引き続き Excel で開くことができます (また、Office 相互運用機能を使用して値を解析する必要がなくなります)。

PowerShell は CSV を問題なく解析できますImport-Csv

Import-Csv grouplist.csv | ForEach-Object {
  "<{0}>
    active = yes
    group = {1}
    interval = 5min
    name = 10.1.2.3   
    host = 10.1.2.3   
    community = 
    version = 1
    timeout = 0
    retries = default
    port = 161
    qos_source = 1
  </{0}>" -f $_.IP, $_.Group
}

ここではフォーマット文字列を使用しています。ここで{0}、などはプレースホルダーです。-fthen はフォーマット演算子で、左側にフォーマット文字列、右側にプレースホルダーの引数を取ります。Import-Csv のおかげで、個々の列に名前でアクセスできることもわかります。

于 2012-06-18T06:22:30.967 に答える