2017-07-26 8 views
0

ExcelファイルをPowerShellにインポートしてXMLファイルとして保存しようとしています。 ExcelファイルとXMLテンプレートがあります。私が行っていることは以下である:文字列のフォーマット中にエラーが発生しました:入力文字列の形式が正しくありません

# define XML configuration template 
$config = "C:\Users\mustafaal\Desktop\StajyerMustafaAl\Gorev\XMLTemplate_v2.ps1" 
Import-Csv C:\Users\mustafaal\Desktop\StajyerMustafaAl\Gorev\VariablesDeneme.csv | ForEach-Object { 
    $xml = "C:\Users\mustafaal\Desktop\StajyerMustafaAl\Gorev\MySampleConfig" + $_.UserName + ".xml" 
    Write-Host $_.username 
    Write-Host $xml 
    [xml]$x = (&$config) -f $_.UserName, $_.SwitchIP, $_.SwitchPort, $_.MACAddress 
    $x.Save($xml) 
} 

のでbasicly私は、Excelファイル内のすべてのユーザ名用のXMLファイルを保存しようとしています。

私はこのエラーを取得しています:

 
Error formatting a string: Input string was not in a correct format. 
At C:\Users\mustafaal\Desktop\StajyerMustafaAl\Gorev\deneme1.ps1:14 char:1 
+ [xml]$x = (&$config) -f $_.UserName, $_.SwitchIP, $_.SwitchPort, $_.MACAddress 

XMLテンプレートのサンプル:

<AttributeList> 
    <RuleAttribute displayValue="Ethernet (15)" value="15" operator="EQUALS" name="NAS-Port-Type" type="Radius:IETF"/> 
    <RuleAttribute displayValue="Login-User (1), Framed-User (2), Authenticate-Only (8)" value="1,2,8" operator="BELONGS_TO" name="Service-Type" type="Radius:IETF"/> 
    <RuleAttribute displayValue={1} value={1} operator="EQUALS" name="NAS-IP-Address" type="Radius:IETF"/> 
    <RuleAttribute displayValue={2} value={2} operator="EQUALS" name="NAS-Port-Id" type="Radius:IETF"/> 
    <RuleAttribute displayValue={3} value={3} operator="EQUALS_IGNORE_CASE" name="Calling-Station-Id" type="Radius:IETF"/> 
    <RuleAttribute displayValue="TEIDOM\"{0} value="TEIDOM\"{0} operator="EQUALS_IGNORE_CASE" name="User-Name" type="Radius:IETF"/> 
</AttributeList> 

CSVサンプル:

 
UserName,SwitchIP,SwitchPort,MACAddress 
AHMETO,10.101.254.104,7,288023041d83 
ahmett,10.101.254.136,4,480fcf4a6719 

基本的に私は、XMLファイルで{}を交換する必要がありますCSVファイル内の変数が、文字列形式のエラーが発生しています。

編集:オーケー、今私は問題を発見した、そこ{}を持つ他のコードがあり、私は彼らが二重作ったが、今私は新しいエラーを得た:

to type "System.Xml.XmlDocument". Error: "'ahmett' is an unexpected token. Expecting white space. Line 5, position 84.

+0

'XMLTemplate_v2.ps1'の内容は何ですか? '(&$ config)'はそのスクリプトを実行するので、 '-f'が操作するための単一のテンプレート文字列を出力する必要があります。 –

+0

これを追加しました – alhn34

答えて

0

Aテンプレートの値は引用符で囲む必要があります。この中

<AttributeList> 
    <RuleAttribute displayValue="Ethernet (15)" value="15" operator="EQUALS" name="NAS-Port-Type" type="Radius:IETF"/> 
    <RuleAttribute displayValue="Login-User (1), Framed-User (2), Authenticate-Only (8)" value="1,2,8" operator="BELONGS_TO" name="Service-Type" type="Radius:IETF"/> 
    <RuleAttribute displayValue={1} value={1} operator="EQUALS" name="NAS-IP-Address" type="Radius:IETF"/> 
    <RuleAttribute displayValue={2} value={2} operator="EQUALS" name="NAS-Port-Id" type="Radius:IETF"/> 
    <RuleAttribute displayValue={3} value={3} operator="EQUALS_IGNORE_CASE" name="Calling-Station-Id" type="Radius:IETF"/> 
    <RuleAttribute displayValue="TEIDOM\"{0} value="TEIDOM\"{0} operator="EQUALS_IGNORE_CASE" name="User-Name" type="Radius:IETF"/> 
</AttributeList> 

:この変更

<AttributeList> 
    <RuleAttribute displayValue="Ethernet (15)" value="15" operator="EQUALS" name="NAS-Port-Type" type="Radius:IETF"/> 
    <RuleAttribute displayValue="Login-User (1), Framed-User (2), Authenticate-Only (8)" value="1,2,8" operator="BELONGS_TO" name="Service-Type" type="Radius:IETF"/> 
    <RuleAttribute displayValue="{1}" value="{1}" operator="EQUALS" name="NAS-IP-Address" type="Radius:IETF"/> 
    <RuleAttribute displayValue="{2}" value="{2}" operator="EQUALS" name="NAS-Port-Id" type="Radius:IETF"/> 
    <RuleAttribute displayValue="{3}" value="{3}" operator="EQUALS_IGNORE_CASE" name="Calling-Station-Id" type="Radius:IETF"/> 
    <RuleAttribute displayValue="TEIDOM\{0}" value="TEIDOM\{0}" operator="EQUALS_IGNORE_CASE" name="User-Name" type="Radius:IETF"/> 
</AttributeList> 

をまた、あなたは、通常のテキストとしてテンプレートをロードする必要があるので、あなたは形式演算子(-f)を使用して値を入力することができます。これが行われたら、テキストなどのデータを保存することができ、次のいずれか

$template = Get-Content 'C:\path\to\template.xml' | Out-String 
Import-Csv 'C:\path\to\input.csv' | ForEach-Object { 
    $filename = 'C:\path\to\{0}.xml' -f $_.UserName 
    $template -f $_.UserName, $_.SwitchIP, $_.SwitchPort, $_.MACAddress | 
     Set-Content $filename 
} 

またはXMLオブジェクトへのテンプレートに充填し、それを保存を解析:

$template = Get-Content 'C:\path\to\template.xml' | Out-String 
Import-Csv 'C:\path\to\input.csv' | ForEach-Object { 
    $filename = 'C:\path\to\{0}.xml' -f $_.UserName 
    [xml]$xml = $template -f $_.UserName, $_.SwitchIP, $_.SwitchPort, $_.MACAddress 
    $xml.Save($filename) 
} 

後者はそのパーサ利点を持っていますXMLデータを検証し、何かが無効な場合にエラーをスローします。

+0

ありがとう! – alhn34

0

あなたが好きな形式でそれを行う必要がありますその:

$x = [xml](Get-Content $config) 
$x | Select-Object -Property UserName, SwitchIP, SwitchPort, MACAddress 
$x.Save($xml) 

あなたが適切な形で設定ファイルを持っている場合、それはそのような何かになります。)

+0

このエラーが発生しました:値 "System.Object []"を "System.Xml.XmlDocument"に変換できません。このノードの有効な子として、エラー: が指定されたノードが間違ったタイプであるため " – alhn34

+0

設定ファイルが間違った形式になっています – KlapenHz

+0

これは私の会社にここに貼り付けることはできませんが、それを貼り付けてください: – alhn34

関連する問題