PowerShell -Part 4
■ このスレッドは過去ログ倉庫に格納されています
すみません教えてください。テキストファイル内の当日の日付を検索したいんですが
patternに変数を使うにはどうすればいいんでしょうか?↓だと検索がヒットしません
$today = Get-Date -Format "yyyyMMdd"
Select-String -path c:\a.txt -pattern $today >>2
まずは
Select-String -path c:\a.txt -pattern '20200101'
で試したら? $today に適当な文字列を代入して、sls しても出来る!
一応、パス区切りが\ の場合は、クォートした方が間違いない
たぶん、そのファイルが存在しないか、エラーが起きているのかも。
それか、文字コードが異なるとか?
$today = "file"
echo $today
Select-String -path c:\Users\Owner\Documents\a.txt -pattern $today
Select-String -path "C:/Users/Owner/Documents/a.txt" -pattern $today
漏れは、UTF-8 を、WSL で、grep してる ごめんなさい。凄い勘違いをしてた・・・。
今日は1月2日だと思い込んでて、テキストファイル内には20200102という文字列しかなくて
Get-Dateで今日の日付で検索してもヒットしない訳だ・・・。
Select-String -patternには変数が問題なく使えることが確認できました。お騒がせして申し訳ない >>3
怒らないで教えて欲しいんだが
PowerShellでよくね? WSL なら、これでフォルダ内のすべてのファイルから検索できる。
grep -i '文字列' ./*
Windows 側のフォルダに、alias も貼っているから、カレントフォルダの移動も簡単
shopt -s expand_aliases
alias windoc='cd /mnt/c/Users/Owner/Documents' コーディングとは直接関係ないのですが、
WMF をわざわざインストールせず、WindowsUpdate のみ適用し続けた Windows7 の場合、
Windows PowerShell のバージョンって 2.0 のままでしょうか?
試せる環境が手元に無くて…。ググっても分かりませんでした。
よろしくお願いします。 >>5
>>8
やっぱりbashの方が優秀なんだな、、
Powershellてアホやろ つまりbashを使ってるとあほになる
やっぱりPowerShellの方が優秀なんだな、、 poewrshellはcmd内蔵にはあったバイナリのコピーが簡単にできなかったり色々半端だよね Copy-Itemがrobocopyレベルに作り込まれていたらcmdに置き換わっていただろうね
革新性面白さに主眼が置かれて運用をきっちりこなす為の地味な部分は蔑ろにされた ×cmdに置き換わっていた
○cmdを置き換えていた PSでrobocopy使えば良いじゃん
これで置換出来るね 魚を下ろすなら出刃包丁、鉛筆を削るならカッターナイフ。一つだけに限定する必要はない。
スクリプティング環境も同じ。WSL でも PowerShell でも、適材適所で選べばいいだけだろ。
俺の場合は WSL ではなく Cygwin と PowerShel を併用してるけど。 >>18
robocopyレベルの機能が欲しいなら欲しい機能をPowerShellで実装すればいいだけだろ
出来合いのものが欲しい人が見るスレじゃないよ? 漏れは、スクリプトを下のように、Ruby で書く
powershell は、そのスクリプト内で、コマンドを呼び出す程度にしか使わない。
長いコードでは圧倒的に、Rubyの方が可読性が高い
# クリップボード内の複数行文字列の、各行の先頭・末尾から、
# 連続する空白類を除去して、クリップボードに入れる
str = `powershell Get-Clipboard`
str.encode! Encoding::UTF_8, Encoding::CP932 # UTF_8 へ変換
ary = str.each_line.map( &:strip ) # 連続する空白類を除去する
IO.popen( 'clip', 'w:cp932' ) do | clip | # CP932 へ戻す
clip.print( ary.join "\n" )
end >>24
>>25
こういう暇人達のオモチャだから置き換わらないんだよ >>26
あっ、Rubyはいいです(^^ゞ
もう終わった言語なんで
PythonかJavaScriptでお願いします >>27
お前の理屈だとPerlのCPANやPythonのPyPIも「暇人達のオモチャ」だなww PowershellはWPFと同様に
こんなことできちゃう俺ってすごい?
って承認要求を満たす為のツール こんな低い程度で承認欲求満たせるなんて
さぞかし安っぽく薄っぺらな人生を歩んで来たんだろうね
君のような知恵遅れクンが羨ましい限りだよ >>18
>Copy-Itemがrobocopyレベルに作り込まれていたらcmdに置き換わっていただろうね
見当違いだよ
あんたがrobocopy相当でないことに不満を持っているのは分かったが、世の中が同じ不満を持っていると勝手に決めつけてもしょうがない
自己と他者の境界を混同する癖があると生き辛さの原因になるぞ
Powershellもcmdもシェルなんだから、どっちからでもrobocopyを呼べばいい
変な固執がなければそれで解決
そもそもPowershellが完璧に作り込まれていたとしてもcmdは置き換わってない
長年のデファクトスタンダードとして居座ったシェルスクリプトを書き直す人はほとんどいないし、そこで覚えた知識を必要に迫られてもいないのにアップデートする人もいない
Powershellへの移行は強制されない限り極めて緩慢にしか進まないんだ >>30
いや普通にぱぱっと学んで普通に道具として使うだろ
どんだけ頭わるいのかコンプレックス丸出し PowerShell使いよりUNIXシェル使いのほうが凄い
同じコマンドなのに仕様が全然違うのを我慢できるんだぜww ごめんな
シェルを使うのに凄いとか凄くないとかちょっと俺には理解できない
チンパンジーが箸を使うとすごいとかそういうレベルの話なのかな >>33
そもそもcmd(MS-dos)もPowerShellも今日日いらんがな
WSL入れとけって WSLは手間が掛かりすぎてNG
・「入れとけ」というが、ユーザー毎にいちいち手動で入れさせる手間が掛かる。しかも厄介なストア配布形態
・一番使いたいはずのログインスクリプト等に使えない
全く話にならない 過去の遺産があるならWSLでもいいけど、どちらでも使えて新規で組むならPowerShellだな >>40
bashかパワーシェル(爆笑)で比較しませんか、ドザさんwww 今日日こんなのでマウント取ろうとする化石がいるとは
もう令和だぞおっさん えっ、この幼稚さはガキなんじゃねーの?おっさんだとしたらヤバいな 前提条件(要件)の提示もなく優劣を論じちゃうのって、典型的な「自称パワーユーザ」だな その「おバカ」とやらに使ってもらおうって気がないから
いつまでたってもLinuxデスクトップは普及しないんだよ Linuxデスクトップ「おバカには使ってほしくありません」 それはシェアをあきらめるって事だと分かってて言うならそれでもいいんだけどね >>50
> いろいろな *[!c]sh 実装のキライなところ
UNIX系シェルは古くからあるから色々意見があっていいけど、嫌いなとこ言うだけってのは馬鹿。
> まだBashで消耗してるの?
読んだけど2年前のスライド&スライド発表者が馬鹿過ぎる。
現在のTwitterアカウントを見たけど「進歩がない…」の一言。
makeのアルゴリズムを紹介するよ!的なことやってて…大丈夫かこいつ…いやはやく(周りが)何とかしないと駄目だろ…。
ていうか >>48 の記事の筆者か…。
生きてて楽しいのかこいつ…。 >>57
> 読んだけど2年前のスライド&スライド発表者が馬鹿過ぎる。
> 現在のTwitterアカウントを見たけど「進歩がない…」の一言。
スレチな話題を延々と繰り返すバカよりは256倍マシだと思うよ >>57
> 嫌いなとこ言うだけってのは馬鹿
> 生きてて楽しいのかこいつ…
ここでPowerShell叩きだけやってるやつそのものじゃん ところでWSLを入れて
Windows10の制御はどういう風にやるんだろ? そもそもUNIXからの流れって
スクリプトがないと何もできなかった
というだけだよね。 >>62
たいして設定項目ないからcomfig.sysとかを直接編集してただろ
ちなみに同時期のunixも似たようなもんだった
スクリプトで設定するようになったのはだいぶ後だったように思う >>63
> だいぶ後だったように思う
80年代からマイコンを使ってた世代からすれば、確かに「だいぶ後」ですねw Windows10, WSL, Ubuntu(Linux)側から、
Wondows側のC ドライブへのアクセスは、
/mnt/c/Users/ユーザー名/Documents/〜
漏れは、いつも、WSL側から、Windows側をgrep してる。
なぜなら、Windowsでは、CP932 と、BOM 無しUTF-8 を区別できないから
BOMが付いていれば区別できるけど、
普通、ウェブ系開発ではバグるので、BOMを付けない Lnuxユーザは大変やね
Winodowsユーザは、そんな面倒なことはしないわな
それなりのツールつかうから 要はLinuxなどの場合は、近頃はいいだろうが
そういうことのためのツールが用意されていないんで
スクリプトに頼るしかなかったということなんだろうな 設定ファイルがスクリプトということに何も疑問を持たなかったんだろかと思うことはある。 Linux板は荒らししかいないし、末期のウェブ板やPHP板みたいになってる。
まともな住人はここに移住してきても良いよね?
ウェブ板やPHP板も移住してるんだし。 Linux板は志賀何とかさんのことを語る板になってしまった。 まさかとは思うがツールというのはGUIのことだろうか
PowerShellスレでCUIよりもGUIが無条件に優れているという話をしているのだろうか
スレチを自己正当化する理由が、然るべきスレが機能不全を起こしてるから行きたくないと?
しつこいスレチがここに機能不全を招くとは思わないのだろうか
前スレに続いての「WSLでよくね」なんて明らかに反応を楽しむ愉快犯なのに、まんまとLinuxのほうが残念だもん!って
いいかげん落ち着いてくれよ >>74
>まさかとは思うがツールというのはGUIのことだろうか
なわけないよ。
要は今は良くなってきているが
シェル言語なないと処理できないようなのがUnix系の世界
だったということ
ほかにろくなものないから ま、そりゃいいか。
PowerShellを語る板だから
ごめん。
PowerShellの話に戻します。 意味不明。結局、CUIでない、GUIでもない"ツール"とはいったい何だったのか 刻々と変化する変数をフォームに表示させたいんだけど
当然この例だと実行した時点での変数しか表示されません。
フォームのラベルの変数を動的に表示し続ける方法を教えてください(この例だと時計のように動かしたい)
$time = Get-Date
Add-Type -AssemblyName System.Windows.Forms
$form = New-Object System.Windows.Forms.Form
$label = New-Object System.Windows.Forms.Label
$label.Text = $time
$form.Controls.Add($label)
$form.ShowDialog() タイマーイベントとかあるじゃろ
C#タイマーあたりでぐぐれ 正確な時間じゃなくても良いなら、Ruby なら、sleep で簡単にできる。
ただし、OS がバッファリングしてると、最後にまとめて出力されてしまう!
STDOUT.sync = true # バッファリングしない
3.times do
puts Time.now
sleep 3
end >>81
別スレッドで非同期にフォームを起動すればいい
using namespace System.Windows.Forms
using assembly System.Windows.Forms
$label = [Label]@{ Dock = "Fill"; Font = "Meiryo,20" }
$form = [Form]@{ Size = "350,100" }
$form.Controls.Add($label)
$runspace = [RunspaceFactory]::CreateRunspace()
$runspace.Open()
$pipeline = $runspace.CreatePipeline()
$pipeline.Commands.AddScript({ param ($form) $form.ShowDialog() })
$pipeline.Commands[0].Parameters.Add("form", $form)
$pipeline.InvokeAsync()
foreach ($p in 1..10) {
if ($Runspace.RunspaceAvailability -ne "Busy") { break }
$time = [datetime]::Now
$label.Text = $time
sleep 1
}
if ($Runspace.RunspaceAvailability -eq "Busy") { $form.Close() }
$runspace.Dispose() >>85
すげー一気に解決したわ
Runspaceとか知らんよありがと PowerShel で凝ったことやろうとすると、どうしても C# の知識が必要になるよな。
おかげで、C# を勉強する良いきっかけになったわ。スキルの幅が広がるのは嬉しい。 C#スキル?
.net frameworkの知識じゃなくて? C#全く使えん奴は凝ったことすら思いつかないのでは $label = [Label]@{ Dock = "Fill"; Font = "Meiryo,20" }
という式を初めて見て驚いてるんだけど、これについてのドキュメントってどこかにありますか? >>92
ありがとう
だいぶ楽になった
こういうの知ってる人ってMSDNのヘルプに全部目を通してるの? オブジェクト志向ライクでいいんだけど、
powershellへbatやVBSから置き換えようとすると機能によってはバージョンチェックをしないといけないのがもどかしい
.NETにしろそうなんだけどね ご教示ください。
商品の価格を定期的にWebサイトから取得したいのですが、Invoke-WebRequestで取得したHtmlWebResponseObjectから要素の内の文字列を取り出そうとすると「Windows セキュリティの警告」のポップアップが表示されてしまいます。
ポップアップを出さずに要素の内の文字列を取得するにはどうすればよいでしょうか?
$response = Invoke-WebRequest -uri "https://www.yodobashi.com/product/100000001002955686/"
$price = $response.ParsedHtml.getElementById("js_scl_unitPrice").innerText
これを実行すると「この Web サイトから個人用の情報を提供できるように、Cookie と呼ばれる小さなファイルをこのコンピューターに配置できるようにしますか?」と表示されます。 cookie powershellでぐぐればやり方は出てくる
javascriptとか出てきたら素直にseleniumを使う
seleniumをpowershellで使う方法もある DateTimePickerで翌日の日付をデフォルト選択する方法ありませんか? [DateTimePicker]@{ Value = [datetime]::Now.AddDays(1) } ■ このスレッドは過去ログ倉庫に格納されています