-PR-
回答 受付中

PowerShellでのエラー

  • 困ってます
  • 質問No.9361645
  • 閲覧数45
  • ありがとう数2
  • 気になる数1
  • 回答数2

お礼率 97% (94/96)

半日たっても閲覧数0でしたので、タイトルとカテゴリーを変えました。
MBSAを用いてWindowsUpdateのオフライン適用に挑戦しています。
コマンドプロンプトで
mbsacli.exe /xmlout /unicode /nd /nvc /catalog wsusscn2.cab > Updatecheck.xml
により出力されたUpdatecheck.xmlの中身は

<XMLOut>
<CatalogInfo><CreationDate>2017-08-07T03:17:51Z</CreationDate></CatalogInfo>
<Check ID="500" Grade="2" Type="5" Cat="1" Rank="1" Name="Developer Tools, Runtimes, and Redistributables のセキュリティ更新プログラム" URL1="Help/Check5311.html" URL2="Help/Check5311fix.html" GroupID="48ce8c86-6850-4f68-8e9d-7dc8535ced60" GroupName="Developer Tools, Runtimes, and Redistributables"><Advice>不足しているセキュリティ更新プログラムが 2 個あります。</Advice><Detail><UpdateData ID="MS11-025" GUID="bb49cc19-8847-4986-aa93-5e905421e55a" BulletinID="MS11-025" KBID="2538242" Type="1" IsInstalled="false" Severity="3" RestartRequired="false"><Title>Microsoft Visual C++ 2005 Service Pack 1 再頒布可能パッケージのセキュリティ更新プログラム (KB2538242)</Title><References><BulletinURL>http://www.microsoft.com/technet/security/bulletin/MS11-025.mspx</BulletinURL><InformationURL>http://go.microsoft.com/fwlink/?LinkId=216804</InformationURL><DownloadURL>http://download.windowsupdate.com/msdownload/update/software/secu/2011/06/vcredist_x86_b8fab0bb7f62a24ddfe77b19cd9a1451abd7b847.exe</DownloadURL></References></UpdateData><UpdateData ID="MS11-025" GUID="729a0dcb-df9e-4d02-b603-ed1aee074428" BulletinID="MS11-025" KBID="2538243" Type="1" IsInstalled="false" Severity="3" RestartRequired="false"><Title>Microsoft Visual C++ 2008 Service Pack 1 再頒布可能パッケージのセキュリティ更新プログラム (KB2538243)</Title><References><BulletinURL>http://www.microsoft.com/technet/security/bulletin/MS11-025.mspx</BulletinURL><InformationURL>http://go.microsoft.com/fwlink/?LinkId=216803</InformationURL><DownloadURL>http://download.windowsupdate.com/msdownload/update/software/secu/2011/05/vcredist_x64_a7c83077b8a28d409e36316d2d7321fa0ccdb7e8.exe</DownloadURL></References></UpdateData></Detail></Check>

とずらずらと続いていっています。
これを読むのにExcelViewerのインストールはしたくないので
linuxのxmltoを使おうとしました。
xmlファイルをutf8に変換後、
(最初"parser error : Input is not proper UTF-8, indicate encoding !"というメッセージが出たため)

$ xmlto -o ./html_xml/ html Updatecheck_utf8.xml
xmlto: /home/mess/Desktop/Updatecheck_utf8.xml does not validate (status 1)
xmlto: Fix document syntax or use --skip-validation option
/home/mess/Desktop/Updatecheck_utf8.xml:16: parser error : Specification mandate value for attribute teData
teData ID="MS11-025" GUID="729a0dcb-df9e-4d02-b603-ed1aee074428" BulletinID="MS1
^
<以下略>

こんな感じでhtml変換に失敗します。
LibreOfficeCalcでメニューから「データ」、「xmlソース」を選択し
ソースファイルでこのxmlファイルを選んでも「インポート」ボタンが暗いままで先に進めません。

ただ、結局やりたかったことは
<DownloadURL>

</DownloadURL>
に挟まれた部分を次々に抜き出していって、さらに行頭にwgetをつけて
wget *ttp://download.windowsupdate.com/msdownload/update/software/secu/2011/06/vcredist_x86_b8fab0bb7f62a24ddfe77b19cd9a1451abd7b847.exe
wget *ttp://download.windowsupdate.com/msdownload/update/software/secu/2011/05/vcredist_x64_a7c83077b8a28d409e36316d2d7321fa0ccdb7e8.exe
(ここは最初の投稿時にサポート担当の方に編集されたようです)
と続いていくスクリプトを自動生成したいということです。

ここまで書いた後、
http://dolls.orz.hm/?p=12070
http://dolls.orz.hm/?p=6166
にPowerShellを使ったやり方が書いてあるのに気づき、ここを参考にして管理者権限でPowerShellにおいて次の2行のコマンドを実行したのですが

$xml = [XML](Get-Content Updatecheck.xml)
$xml.XMLOut.Check.Detail.UpdateData | Where-Object {$_.IsInstalled.Contains("false")} | Select-Object {$_.References.DownloadURL} | Out-File downloadlist.txt> type .¥downloadlist.txt
Out-File : パラメーター 'Encoding の引数を確認できません。引数 "type" は、ValidateSet 属性で指定されたセット "unicode、
utf7、utf8、utf32、ascii、bigendianunicode、default、oem" に属していません。このセットの引数を指定して、コマンドを再度
実行してください。
発生場所 行:1 文字:141
+ $xml.XMLOut.Check.Detail.UpdateData | Where-Object {$_.IsInstalled.Contains("false")} | Select-Object {$_.References.
DownloadURL} | Out-File <<<< downloadlist.txt> type .¥downloadlist.txt
+ CategoryInfo : InvalidData: (:) [Out-File]、ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.OutFileCommand

1行目は問題ないですが、2行目がご覧のようになります。
どのようにすればいいでしょうか?
よろしくお願いします。
通報する
  • 回答数2

回答 (全2件)

  • 回答No.1
レベル11

ベストアンサー率 43% (161/366)

typeの直前の>を;にする
補足コメント
ding2

お礼率 97% (94/96)

質問本文の中に間違ったことを書いてある部分がありますので、
ここで修正しておきます。
行頭にwgetをつけたスクリプトを生成する部分ですが、
IsInstalled="false"
となっている項目のDownloadURLのみ抜き出した方がいいので、
ここの部分に書いているやり方だと余計なものまでリストされてしまいます。
投稿日時 - 2017-08-12 20:42:50
お礼コメント
ding2

お礼率 97% (94/96)

ありがとうございます。
変更してみたのですけど

$xml.XMLOut.Check.Detail.UpdateData | Where-Object {$_.IsInstalled.Contains("false")} | Select
-Object {$_.References.DownloadURL} | Out-File downloadlist.txt; type .\downloadlist.txt
null 値の式ではメソッドを呼び出せません。
発生場所 行:1 文字:76
+ $xml.XMLOut.Check.Detail.UpdateData | Where-Object {$_.IsInstalled.Contains <<<< ("false")} | Select-Object {$_.Refer
ences.DownloadURL} | Out-File downloadlist.txt; type .\downloadlist.txt
+ CategoryInfo : InvalidOperation: (Contains:String) []、RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull

となってしまいます。変更した;の前に半角空白を入れても同じ結果です。
投稿日時 - 2017-08-12 20:37:44


  • 回答No.2
レベル11

ベストアンサー率 43% (161/366)

$xml=[xml](gc Updatecheck.xml)
$xml.selectNodes('//DownloadURL')."#text"|%{"wget $_"}
補足コメント
ding2

お礼率 97% (94/96)

http://dolls.orz.hm/?p=12070
からコピペする時に間違えたのですが
そもそも質問本文に書いたコマンドの最後の
> type .¥downloadlist.txt
は不要でした。ここを削った時のエラーメッセージは
; type .\downloadlist.txt
とした時のエラーメッセージと同一でした。
投稿日時 - 2017-08-15 11:06:52
お礼コメント
ding2

お礼率 97% (94/96)

ありがとうございます。
やってみましたけど

$xml=[xml](gc Updatecheck.xml)
$xml.selectNodes('//DownloadURL')."#text"|%{"wget $_"}
wget

"wget"が一回出て来ただけでした。
投稿日時 - 2017-08-15 11:00:51
  • 回答数2
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


専門家があなたの悩みに回答!

-PR-

ピックアップ

-PR-
ページ先頭へ