Windows PowerShell Part5 [無断転載禁止]©2ch.net
poweshellって結構なんでもできそうな感じがするんだけど、もしかしてDirectXのDDSファイルの情報とかも取れたりするのか? DDSファイルの情報を取得して返すプログラムを書く
↓
そのプログラムをPowerShellから呼ぶ
で、できるんじゃないの >>186
馬鹿が一々口出してこ無くていいよ
そんなに構って欲しいの?構ってチャン >>185
DDSファイルの情報が何者か知らんけどファイル内に情報あるなら取得できるでしょ 偉い人アドバイスをお願いします。↓のブログを見つけて携帯にグローバルIPアドレスの変更を通知しようと考えまして、
旧アドレスを記載したテキストを参照するところまでは記述の意味を何とか理解できたのですが、
「レスポンスの読み込み&確認」以降がどうしても良くわかりません。
http://rtaki.blogspot.jp/2010/10/ip.html
サイト(http://www.axisnetworks.biz/tools/gip/)のソースを見てみると、グローバルIPアドレスの直前に「<p class="style4" name="ip">」がありますので、
「$line」が空でなければ、そこにこれが含まれているかチェックして、次に何かとの一致があるかを確認しているようですが、
この「(?<address>[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)」が何を意味しているのか分からないです。
また、「$new address」は「$matches.address」だと定義され、それが変更時には上書き動作に引き継がれているようですが、
その「$new addredd」がどこから来るのかが分かりません。
なお、Write-Outputについては、2つ目の「前回確認済みのグローバルIPアドレス:」までは表示できています。 正規表現でIPアドレスっぽいパターンを持った文字列を検索して、見つかったらその部分にaddressという名前を付けてる
$new addressではなく$new_addressな
どこから来るとかではなく、新しい変数をここで初めて宣言して代入してるだけ
$matchesの方がどこから来たかというと、-match演算子の結果が格納される暗黙変数として決められてる
どっちのifでどう失敗してるかとか、Write-outputをいろんな行に入れて、いろいろな値や式を渡して模索してみるといいと思うよ >>190
なかなか新鮮な質問だねw
(?<address>[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)
は正規表現で、数字の連続、点、数字の連続、点、数字の連続、点、数字の連続 にマッチする。要するにIPアドレスっぽい部分
?<address>はマッチした文字を入れる変数名の指定。$Matches.addresという書き方で参照できて分かりやすいねという話
$new_address = $matches.address は単純な代入式だw $new_addressという変数に$matches.addressの値を入れてるだけ
昔言語の先生の、「プログラムの=はイコールじゃない。結果的に同じになるけど」ってセリフ思い出したw >>191
ありがとうございます! 教えてもらった「match演算子」というキーワードで検索したら↓のサイトがすぐにヒットして、ようやく意味がつかめそうです!
http://www.pine4.net/Memo/Article/Archives/168
「$matches.address」のドットが「$resp.ContentEncoding」のドットのようにメソッド等の前に付けるものなのかな?と思っていたため、その前の「$mathes」は単なる任意の変数かと思い込んでました^^;
https://technet.microsoft.com/ja-jp/scriptcenter/powershell_owner01.aspx
今まで全くプログラムは経験がなかったので↑とか複数の解説に目を通して基本的なルールを確認していたのですが、ド素人にはかなりハードルが高くて数日悩んでました・・・。 >>192
ありがとうございます! [0-9]+については、↓の記載をみてIPアドレスの3ケタだと思っていたのですが、「\.」が不明でした・・・。
http://www.lightship.co.jp/FileVisor6/help/operation/regexp.htm
エスケープが「'」だって解説があったので、もしかしたら\も?とは想像していたのですが、ドットを文字として使いたい場合は\を前に付けるという理解で合っていますか? >>194
` はPowerShellのエスケープ
RegularExpressionはPowerShell専用じゃないので\をエスケープに使ってる
ちょっと戸惑うけどそう言うものだと思うしかない かつてWSHが捨てられたように、今度はPSが捨てられる序章ってこと? 100枚ほどある連番画像を保存したくプログラミングの知識もない自分が
独学で下記のようなスクリプトを書きました
目的は果たせたのですがこういう風に書いた方がいいとかの意見が頂けると助かります
画像URL
"http://modelblog.org/wp-content/uploads/2017/05/EvaR24_001.jpg"から
"http://modelblog.org/wp-content/uploads/2017/05/EvaR24_100.jpg"まで
スクリプト
$Dir = ".\IMG\EvaR24_"
for ($i=1; $i -le 100; $i++){
$Source = "http://modelblog.org/wp-content/uploads/2017/05/EvaR24_" + $i.ToString("000") + ".jpg"
$Dest = $Dir + $i.ToString("000") + ".jpg"
Invoke-WebRequest -Uri $Source -OutFile $Dest
}
Pause そのままでもいいと思うけど
PSの推奨する書き方はたぶんこんな感じ
$Dir = ".\IMG\EvaR24_"
foreach($i in 1..100){
$hash = @{
Uri = "http://modelblog.org/wp-content/uploads/2017/05/EvaR24_{0:000}.jpg" -f $i
OutFile = Join-Path $Dir ("{0:000}.jpg" -f $i)
}
Invoke-WebRequest @hash
}
Pause >>202
ありがとうございます。
こんなナイスな書き方あるとは想像も付きませんでした。
どうして@hashが
-OutFile: ファイルパス -Uri: 画像URL
みたいな感じで展開されるのかも未だ理解出来てないのですが
調べながら理解を深めたいと思います >>202
スプラッティングなんてあるんだな
初めて知ったわ
https://technet.microsoft.com/ja-jp/library/gg675931.aspx
たくさんあるパラメーターの一部だけを変えながらコマンドを呼び出したい時とかに使うと便利かも >>203
@ で展開されるとか、まあそういうもんだと思うしかないね
利点は別の変数用意する必要ないからミスが減る >>201
> $Dir = ".\IMG\EvaR24_"
この 'EvaR24_' と
> $Source = "http://modelblog.org/wp-content/uploads/2017/05/EvaR24_"
このURLの最後の 'EvaR24_' が同じ意味なら
$Dir = '.\IMG'
$Prefix = 'EvaR24_'
for($i in 1..100){
$Name = "$Prefix{0:000}.jpg" -f $i
$Source = "http://modelblog.org/wp-content/uploads/2017/05/$Name"
$Dest = Join-Path $Dir $Name
Invoke-WebRequest -Uri $Source -OutFile $Dest
}
Pause
ってやるかな >>204
>>205
スプラッティングと言うんですね リンクありがとうございます
ためになります
>>206
便利な機能だと思うのでそういうもんだと思って受け容れたいと思います
>>207
まさにそういうことでファイル名の一部です
自分でも$Dirなんて名前の変数に含めるのはちょっとおかしいかな?
と思いつつ手抜きしてた部分だったのでお恥ずかしい限りです
みなさんありがとうございます ついでにパイプ使いまくりで変数ゼロの作ってみた
ここまでやると逆に分かりづらい
1..100|%{"EvaR24_{0:000}.jpg" -f $_}|%{
@{
Uri = "http://modelblog.org/wp-content/uploads/2017/05/$_"
OutFile = Join-Path ".\IMG" $_
}
}|%{Invoke-WebRequest @_} 質問させてください。
@:ADからユーザーIDを基にメールアドレスを引っ張ってくる
A:@の処理を数百単位のユーザー分一気に行い、ファイル(txt、csv等)に出力
↑の2点をやる必要があり方法を調べているとどうも@はpowershellでできそうだ、と
詳細を調べて以下の形でメールアドレスを引っ張り、csvに出力すること自体はできました。
get-aduser -filter {Name -like "ユーザー名"} -Property EmailAddress | Select-Object EmailAddress | Export-csv -path パスとファイル名.csv -NoTypeInformation
ですが、出力された結果は
EmailAddress
xxxxx@xxxxx.co.jp
と2行になっていました。
これを2行目(メールアドレスだけ)出力する方法はないでしょうか。
また、Aについて、あらかじめ用意したユーザーIDが記載されたファイルのインポートややコピペで一気にメールアドレスを
出力する方法はないでしょうか。
よろしくお願いします >>211
csvの形式は最初にヘッダ行が必要だから、それが正常な出力だよ
アドレスだけにしたいならこれでいい
get-aduser 略|%{$_.EmailAddress}|out-file パスとファイル名.txt
あとユーザー名のリストでやるならこうかな
Get-Content ユーザーIDが記載されたファイル|%{get-aduser -filter {Name -like $_} -Property EmailAddress }| 略
やっつけで処理遅そうだけど スクリプトを覚える動機は何時だってエロ画像ダウンローダなんだな。 わざわざVSを立ち上げてプロジェを作るほどじゃないけど、だからと言って
いまさらbatchを使う気にもなれない
と言う理由でpshを使ってる >>212
ありがとうございます。お礼遅くなってすいません。
教えていただいたやり方で一斉にメールアドレスを取得できる事を確認できました。
Powershellなんて使った事もない人間に無茶振りする上司が悪いので、もっさりでも
「こんなもんですよ」で通しますw $付きの環境変数があるんだけど、変数名の前にenv:付けても取れない。
この場合どうせればよいかのぅ。 引用符をシングルクォートに変える
それでもダメならアクサングラーブでエスケープするとか >>217
明日やってみます!ありがとう!
結果も報告いたしますね! >>217
あれ。。こんな感じですか?
環境変数 $aaa
$bbb='$env:aaa'
echo $bbb
変数bbbに、環境変数$aaaが代入される それだと単にaaaという環境変数を求める書き方になってる
ちょっと試してみた
get-item 'env:$aaa'
get-item env:'$aaa'
get-item env:`$aaa
どれでも値を取り出せる
echo等に直接渡すために上記の先頭に$を付けると{}で囲んでみろよという親切な警告が出るね
{}で囲むならシンプルにecho ${env:$aaa}でOKだったわ >>220
取れました!取れました!取れました!取れました!
ありがとおおおおおおおおおおおおおおおおおおおおおおおおございます!! 先輩方お世話になります
PowerShellではIEやExcelについては、内部情報がわかっているのでセル内の数値を読みだしたり、
IEでWeb上のデータをExcelに読み出したりできますが、
知らないソフトを操作することはできるのでしょうか。
パスワード管理ソフトがそこにあった場合、それを自動で操作できるものでしょうか。 >>224
それを見て安心しました。
PowerShellを本格的に使います。
ありがとうございました。 引数で渡されたcsvヘッダーなしファイルを、
1レコードづつ分割して、
各レコード中の5番目の項目をファイル名にしたく
色々調べて何となくパワーシェルでできそうかもと感じたのですが、
パワーシェルでは難しいものでしょうか エラー表示を出したくないのですが、
invoke-restmethod -uri http://127.0.0.1/ -ErrorAction SilentlyContinue
invoke-restmethod -uri http://127.0.0.1/ | out-null
invoke-restmethod -uri http://127.0.0.1/ 2> $null
のいずれもエラーが出てしまいます。何か良い手はないでしょうか。 >>226
PowerShell csv
とかでググることもしない君には無理かも 自己解決。
try {invoke-restmethod -uri http://169.254.169.254/} catch {} 使い始めて半年になるけど、コマンドプロンプトよか遥かにマシだけど、MSのスクリプト言語はやっぱうんこだね >>232
あなたの考えるうんこでないスクリプト言語は何? >>232
理由を説明することが出来ず結果だけ述べるやつは頭蓋骨の中にウンコが詰まってるらしいね 負荷テストのために下記コードを書いて見ましたがこれって音は全部鳴ってるのかな?
# 下記サイトより効果音をお借りしました。
# http://maoudamashii.jokersounds.com/archives/se_maoudamashii_explosion06.html
# d:\indexフォルダは好きなように変更してください。
$loopcont = 128
$list = New-Object 'System.Collections.Generic.List[System.Media.SoundPlayer]'
for ($i=0; $i -lt $loopcont; $i++){
$a = New-Object Media.SoundPlayer("d:\Index\se_maoudamashii_explosion06.wav")
$list.Add($a)
#$list[$i] = New-Object Media.SoundPlayer("d:\Index\se_maoudamashii_explosion06.wav")
Write-Output "サウンド $i を追加しました。"
}
for ($i=0; $i -lt $loopcont; $i++){
$list[$i].PlayLooping()
Write-Output "サウンド $i を再生しました。"
Start-Sleep -m 10
}
Start-Sleep -s 15
for ($i=0; $i -lt $loopcont; $i++){
$list[$i].Stop()
Write-Output "サウンド $i を停止しました。"
}
Start-Sleep -s 5 プログラムスレ行きます
>>235は取り下げします UI Automation Extensionで#32770のダイアログを取得してくれないのってどう対応すればいいんでしょうか
UIAutomationSpyで見る限り取得先は間違ってないんですが、Sleep入れたりしても改善しません >>226
練習のつもりでそれやってみた。私がやったのはこんな感じ。
もっといい方法あるんでしょうけど。
$lines=get-content c:\Test.csv
$head=($lines[4].Split(",")).ForEach({$_})
$data=($lines|ConvertFrom-Csv -Header $head)[0..3+5..($lines.Length-1)] テキスト変換ならawkも楽しい
gawk -F ',' -- '{print>>$5}' %1 あ〜〜〜、
私、問題を取り違えてる
5列めをファイル名にすんのね。
5行目をラベルにすると勘違い。
またトライしてみよう。 ごめん、いまの226じゃなく238ね、
何度も申し訳ない。 こんな感じかな。
ファイル名にして、中身を何にするのかわからないんで
単に5列めを取り出しただけだけになるけど
$lines=Get-Content c:\test csv -Encoding Default
$lines|%{$_.Split(",")[5]} 同じことを短く書くとこうかな
(Get-Content C:\Test.csv).Foreach({$_.Split(",")[5]}) さらに短くすると、こんな感じかな
(GC C:\test.csv).foreach({$_.Split(",")[5]})
PowerShellって
他のスクリプトに比べると可読性がいいね >>244
cat C:\test.csv | %{$_.Split(",")[5]}
とか?
Get-Content はcatと書きたい派 まあ、ヘッダーがないなら付けた方がいいよね。
単純に「,」で分割しちゃうとエスケープされた,が入っている時に困る
cat C:\test.csv | ConvertFrom-Csv -Header @('a', 'b', 'c', 'd', 'filename') | %{$_.filename} パイプ経由だったら
cat C:\test.csv|Select ({$_.split(",")[5]})
の方が速いかもしれない >>239以外は5列目を取り出すというスクリプトにしかなってない
エクササイズにしたってそれでいいの?
質問者の「ファイル名にしたい」というキーワードは、行ごとに個別ファイルに分割出力したいってことと考えるのが自然
いろいろ調べてパワーシェルでできそうかも?パワーシェルでは難しいですか?って疑問ともよりマッチする
質問者の言葉足らずも、プログラマのできる範囲ややってみたいことも「顧客が本当に必要だったもの」っていうブランコの風刺絵を連想させるゾ ファイル名にしたいっていうのが良く分からんかったからスルーしてたわ。
とりあえず、csvの5列目の値をファイル名にもつ、空ファイルを作るならこんな感じかな?
(動かしてないけど)
cat C:\test.csv | ConvertFrom-Csv -Header @('a', 'b', 'c', 'd', 'filename') | %{eco "" > $_.filename} $path = 'C:\test.csv'
gc $path | % {sc (ConvertFrom-Csv $_ -h (1..5)).(5) $_}
別に質問スレじゃないから、古い質問をダシに遊んでたっていいんじゃね? 出力ファイルの内容を何にするのか意味がとれなかったよ。
その行ということなんだな。こんなやり方にしてみた。
GC C:\test.csv|%{out-file -i $_ -fi $($_.Split(",")[0]+".csv")} あ、配列のインデックス間違った
0 じゃなく 4 ですね。 powershellのバグ発見しちゃったんですけど。
chdir "test.txt" 2> clip
ってやってもエラー出力がクリップボードにコピーされません。 chdir "test.txt" 2>&1 | clip
ってやったらできました。
バグなんて言ってすいませんでした、powershellさん。 gc aaa.txt
↑のコマンドでaaa.txtの中身を表示できますが、この時に
1行目
2行目
3行目
4行目
5行目
と行順に表示するのではなく
3行目
2行目
5行目
1行目
4行目
のようにランダムに表示することはできるのでしょうか? $txt = gc aaa.txt
random $txt -c $txt.Length 友達がWindowsで稼げている情報など。ニュースというか参考までに。
⇒ http://kuchibeta.sblo.jp/article/181868190.html
興味がある方のために書きました。
OEE18BYXAP >>257
返信遅れてすみません。
うまく出来ました。ありがとうございます!
randomってかなり初期バージョンのPowerShellですら使えるんですね。存在すら知りませんでした(^_^;) こんなの作る暇あるならオブジェクトリテラルくれよ
PowerShell should support creating an List similar to how it supports arrays
https://github.com/PowerShell/PowerShell/issues/5643 powershellすごく便利よね。これなんで流行らないの・・・。 >>263
頭の良い人にしか使いこなせない
使いはじめるハードルも高い 裏方だけど十分流行ってると思うよ。
MSのサーバー系の管理はほとんどPowerShellに置き換わってるし
Azureの管理もPowerShellが主流。
Win10でもちょっと探ってみれば随所で使われてる。
MS系のシステム管理者はだいたい大なり小なり使ってるんでは。 ちょっとしたBootstrapperとかもそうやね >>263
とっつきにくいんだよねw
自分も最初はCMDと行ったり来たりしてた。
今は慣れちゃったからCMDと使い分けてるよ。
SQLのハンドブックでSqlServerやOracleの構文が併記されてる書籍があるけど
同じようにCMDとPowershellを併記した書籍なりサイトがあれば初心者も入りやすいかもね。 https://blogs.technet.microsoft.com/jpsecurity/2018/02/06/now-you-see-me-exposing-fileless-malware/
PowerShell を無効化すべきですか?
いいえ。PowerShell は強力で安全な管理ツールであり、多くのシステム機能や IT 機能にとって重要なものです。
攻撃者が使用する悪意のある PowerShell スクリプトは、最初の侵害が起こった後にのみ有効な悪用後のテクニックです。
PowerShell の悪用はソフトウェア エクスプロイト、ソーシャル エンジニアリング、または資格情報の盗難など
他の悪意のあるアクションで開始される攻撃の兆候となります。
重要なのは、攻撃者が PowerShell を悪用できるポジションに立つことを防止することです。 6.0.1入れてみた、起動や動作がかなり早くなってる
標準のエンコードがUTF8になったようで、今までshiftjis扱うには-encode defaultで済んでたのが -encode oemに
あと.ps1ソースがshitjisだと文字化けする
ついでにテスト環境がいまいち、ISEでは使えないし
vscodeも(出来るとは思うけど)設定がよく分からない。F5のデバッグだと自動で5.01が立ち上がる
まあwin7に5.0.1とか入れるくらいなら6.0がいいかもね 'a'..'z' が 'a' から 'z' までの文字を返すようになったらしいので
'あ'..'こ' ってやってみたら予想外の結果が返って来たw いろは順って言ったら"い".."と" で「いろはにほへと」でしょw
JISコードの順番だね、"ぁ".."ん"でひらがな全部出てくる これ考えた人天才だな。1文字も重複せずにストーリーにしちゃうなんて。
「いろはにほへと ちりぬるを わかよたれそ つねならむ うゐのおくやま けふこえて あさきゆめみし ゑひもせすん」
↓
「色は匂へど 散りぬるを 我が世誰そ 常ならむ 有為の奥山 今日越えて 浅き夢見じ 酔ひもせず」 >>279
確かにw
コーディングでこれ書いてるとこ見られたら勘違いされそうw