X



【最強CUI】PowerShell -Part 2 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0162デフォルトの名無しさん
垢版 |
2017/06/26(月) 08:11:40.80ID:78rqJMYE
プログラムに詳しいID:muOV6x9Q「PowerShell ユーザーのレベルが低くて PowerShell が流行らない」

俺「PowerShell の実行速度知ってるのかな。」
0168デフォルトの名無しさん
垢版 |
2017/06/26(月) 16:48:34.60ID:78rqJMYE
>>164
PowerShell が流行ってないなら、何が流行っていると言うのか。
Python か?
Ruby か?
0169デフォルトの名無しさん
垢版 |
2017/06/26(月) 18:25:37.00ID:1MMeaTZS
>>166
だから無知は黙っとけよ
Windows 7 なら初めから csc.exe は入ってる

>>167
どこが背伸びしてるかも書けなくてクヤシー
ってか w
0170デフォルトの名無しさん
垢版 |
2017/06/26(月) 22:20:40.86ID:ta2e2oUg
bashでいいんだよね
最近はwindowsでも当たり前のように動くし
あの不恰好なハイフンケースも見なくて済む
0171デフォルトの名無しさん
垢版 |
2017/06/27(火) 00:10:11.76ID:i+35CN1y
bash はテキストを扱うけど、PowerShell はオブジェクトを扱う

だから今では、Linux でも、PowerShell を使う
0173デフォルトの名無しさん
垢版 |
2017/06/27(火) 22:24:35.01ID:yIuIIYT1
オブジェクトパイプラインは
シェルスクリプトに相性最高だから
PowerShell使ってる
0174デフォルトの名無しさん
垢版 |
2017/06/27(火) 23:07:35.60ID:9pQu4/DR
PowerShellで動くGradleみたいなタスクランナーないのか?
適当なタスクはPowerShellで書いて難しいのは.NETでプラグイン書いて拡張みたいな
0175デフォルトの名無しさん
垢版 |
2017/06/30(金) 11:05:09.77ID:4xsmuURB
スタート右クリック -> コンピュータの管理 -> サービス一覧にHomeGroupListenerがありますが
Powershellのサービス表示コマンドgsvでHomeGroupListenerが出てきません
何故でしょうか?分かる方教えてください
0176デフォルトの名無しさん
垢版 |
2017/07/01(土) 10:38:47.37ID:365+VqkD
>>175
Powershellを管理者として実行してる場合は出てくる
標準ユーザーからだと見れない設定になってるみたい
0178デフォルトの名無しさん
垢版 |
2017/07/07(金) 00:02:12.03ID:i4NCWQ7g
コマンドプロンプトでbatファイルで「powershell -command '〜'」の形式で実行したいと考えています。
Excelのセルの値にセル内改行が入っている場合、〜.text.replace("`n","")で取り除けないかと考えていたのですが、
シングルクォーテーションで囲っているからか「`n」の部分が改行コードと認識されないようで、うまくいきませんでした。

powershellのISEで「powershell -command」を除いて「'〜'」の部分をシングルクォーテーションを除いて実行すればできるらしいことは分かったのですが、
「powershell -command」を除かないbatファイル形式だと実行できないままで、じゃあbatファイル形式だと本当にできないのかどうかが判断できないでいます。

詳しい方がいたら、batファイル形式でExcelのセル内改行を除くことができるか、実現の可否を教えてもらえるとありがたいです。
0180デフォルトの名無しさん
垢版 |
2017/07/07(金) 15:24:04.06ID:ZubRvcdJ
>>178
セル内改行やらシングルクォーテーションやらを除いて何たらのくだりがよく分からないのですが
とにかくbatファイルからPowerShellを呼び出して改行コードを消すのはできましたよ

batファイルだとコマンド内のダブルクォーテーションをエスケープするのが面倒だし、>>179が言われるように
PS1ファイルにコマンドを書いて、それを呼び出すのが一番良いと思います


REM 改行コードあり
start cmd /k powershell -command "$a=\"hoge`nfuga\";$a"

REM 改行コード削除
start cmd /k powershell -command "$a=\"hoge`nfuga\";$a.replace(\"`n\", \"\")"
0181デフォルトの名無しさん
垢版 |
2017/07/08(土) 16:14:05.15ID:fy9+Ir4c
>>179-180
別の言語環境からPowershellを実行しようと考えていました。
PS1を呼び出そうとしても管理者権限がなく、
客先なので権限的に難しいです;

コードは試してみてうまくいきました。
ありがとうございました。
0183デフォルトの名無しさん
垢版 |
2017/07/08(土) 23:33:03.82ID:VtagckP8
`nを取り除くだけならコマンドプロンプトだけでできる
>set a="hoge`nfuga"

>echo %a%
"hoge`nfuga"

>echo %a:`n=%
"hogefuga"
0184デフォルトの名無しさん
垢版 |
2017/07/11(火) 21:26:19.29ID:dObX9Tuu
>>182-183
客先でget-executionpolicyを実行した結果、restictedでした。
変更しようとしたらアクセス拒否されました(客先なので管理者権限無し)。
なおVersionは2.0です;

Excelのセル内改行を処理することが目的でした。
コマンドプロンプトだとExcelを開いてその中身を操作することはできないはず
(できるとしたら、方法知らないです)。
0188デフォルトの名無しさん
垢版 |
2017/07/15(土) 11:47:00.67ID:gU/I/qic
>>186が完璧すぎてコレで解決すると思いますが、あえて、あえて欠点を言うならば
batファイルとps1ファイルの2つを管理することになることです、、そこでbatファイルだけで済ませてみようのコーナー!

rem --------------------------------------------------------------------------------
rem ダブルクォート内のダブルクォートは\でエスケープ
rem アンパサンド、パイプ、括弧などの特殊文字は^(キャレット)でエスケープ
rem %(ForEach-Object)は%%
rem --------------------------------------------------------------------------------
set cmd=^
$a=\"hoge`nfuga\";$a.replace(\"`n\", \"\");^
gsv ^| ?{$_.status -eq \"stopped\"} ^| select-object -first 5 ^| %%{$_.displayname}

start cmd /k powershell -command "%cmd%"


いかがでしょうか、エスケープまみれで若干見難くメンテナンス性に欠けてる雰囲気を醸し出していながら
あら?案外PowerShellのコマンド呼び出せるじゃん?結構複雑な処理もできるじゃん?という可能性を感じて頂けると思います
0189デフォルトの名無しさん
垢版 |
2017/07/15(土) 12:12:56.60ID:CHIBYjTE
JScriptをバッチで書こうってのと同じ発想だね
ちょっと面白かったけど結局使わなくなったな、やっぱメンテナンス性が悪い
0198デフォルトの名無しさん
垢版 |
2017/07/26(水) 15:57:09.64ID:oWetxvTP
「将来のリリースでは削除予定(中略)

削除
Outlook Express
ペイント

非推奨
IIS用のRSA/AES暗号化
Windows PowerShell 2.0

ペイントが削除されることは大きな話題となり、これを受けて
MicrosoftはペイントをWindowsストアで提供する計画を明らかにした」

Windows 10 Fall Creators Updateで削除される機能が公表される。
ペイントは「非推奨」となりWindowsストアで提供 | スラド IT
https://it.srad.jp/story/17/07/26/056231/
2017年07月26日 14時42分
0202デフォルトの名無しさん
垢版 |
2017/07/27(木) 00:20:15.41ID:QED4HDCh
>>200
毎日使ってる。

メモ帳は F5で日時入れて日記
あと、書式を削除して文字列をコピペするときに中継につかう。

ペイントは保存だけだけどキャプチャしたサイズで保存できるから便利だった。
0203デフォルトの名無しさん
垢版 |
2017/07/27(木) 07:04:28.87ID:P1js1uXh
>>202
> 書式を削除して文字列をコピペするときに中継につかう。
これは俺もよく使ったな
2007 辺りから Office でテキストだけの貼り付けができるようになったのでだいぶ出番は少なくなったけど
0204デフォルトの名無しさん
垢版 |
2017/07/27(木) 22:36:14.85ID:wZCn8yX+
>>202
オレ書式消す時にはwebブラウザの検索欄使ってるわ。
メモ帳起動するのも面倒くさい。
0205デフォルトの名無しさん
垢版 |
2017/07/28(金) 00:13:48.81ID:BWZfnzS5
PSのスレとしてはこれを使いやすいとこに置いとくとかが正解では
v5.0以降じゃないと動かないけど

(Get-Clipboard)|Set-Clipboard
0207デフォルトの名無しさん
垢版 |
2017/07/28(金) 12:33:26.50ID:WvgdGCet
>>206
逆に言えば、ブラウザ検索窓で済むくらい、一行が多いって事じゃね?
0209デフォルトの名無しさん
垢版 |
2017/08/07(月) 09:28:31.23ID:ZOe0YyE+
 あまり仕様を理解してないせいかもしれませんが,オブジェクトのプロパティに最後のひと押しをしたい時に,よい書き方が分かりません。教えてください。

 例えば chrome の プライベートメモリサイズの合計を調べたいとします

>>> gps chrome | Measure-Object PM -sum

 ここまでは良いのですけど。 さらに総和を 1mb で割りたいとします。
 果たしてもう一度パイプを通すべきなのでしょうか。

>>> gps chrome | Measure-Object PM -sum | % {$_.sum/1MB}

 この「パイプを通して foreach……」というのが,方法としておかしい気がするんです。
 ただの考え過ぎかもしれませんが,似たようなケースで多々も同じ方法を使っていて……いつも不安になってます。

 どなたかご教授いただければ幸いです。
0210デフォルトの名無しさん
垢版 |
2017/08/07(月) 10:25:25.82ID:LLOFEtR0
>>209
>この「パイプを通して foreach……」というのが,方法としておかしい気がするんです。
なぜおかしいと思うの?
0211デフォルトの名無しさん
垢版 |
2017/08/07(月) 10:38:22.40ID:aJuSimYa
>>209
自分もおかしくないと思うけど、パイプ使いたくないならこうすれば?

(gps chrome | Measure-Object PM -sum).sum / 1mb
0213デフォルトの名無しさん
垢版 |
2017/08/07(月) 23:18:53.21ID:ZOe0YyE+
 そこまでおかしくないということでしたら安心しました。

 おかしいかというよりかは PowerShell においてこれが自然な方法かどうかが気になっていました。
 プロパティを調べるにはただ obj.sum と書くのが自然な気がしたからです。そのために別の手続きを幾つか経過させるべきなのか迷っていました。
 その意味では >>211 さんの方法がより良い気がします。

 PowerShell では,代入文などを使って素朴に書いたほうが綺麗にできているのかもしれません。

 自然だとか綺麗だとかは個人的な美学の問題ですし,PowerShell が出始めたころに出し尽くした議論だとは思いますけど……。

 どうもありがとうございました!
0214デフォルトの名無しさん
垢版 |
2017/08/08(火) 01:16:03.36ID:nf4mccFn
>>213
211の方法でも、さらに加工しようとするとややこしくなる
例えば文字列でMBを加えて出力しようとすると
Write-Host "$((gps chrome | Measure-Object PM -sum).sum / 1mb)MB"

これよりはパイプだけの方が見やすいと思う
gps chrome | Measure-Object PM -sum | %{$_.sum/1MB} | %{"$($_)MB"} | Write-Host

まあ変数使えよって話かもしれないけどw
0216デフォルトの名無しさん
垢版 |
2017/08/09(水) 08:38:50.59ID:RoXwN+kA
俺は下の方が読みやすいな。
左から順に読み下せるってのが、パイプの性質に合ってる気がする。
まあ、好みかもな。
0217デフォルトの名無しさん
垢版 |
2017/08/09(水) 09:28:52.63ID:VOmW1luq
>>213
obj.sum的なことは$_.sumでやってるじゃん

1つの要素をForeachで回すのに違和感があるのかな?
Foreachで回す時にいちいち要素数なんか考慮しないよ、要素なんてゼロの時もあるし1の時もあるし複数ある時もあるわけだし

要素が1つの時は、(hogehoge).sum と書いて、要素が2つ以上ある時は、hogehoge | %{$_.sum} と書き分ける方がおかしい
よって、これは好みの問題ではなく正解は>>214でいうところの下の書き方が正解
好みとか美学とかなんたらいう前にPowershellの流儀に従うべき、上の書き方はありえないよ、ありえない
0220デフォルトの名無しさん
垢版 |
2017/08/09(水) 16:33:47.42ID:uHgJiGhi
たとえばカレントディレクトリににa.txtとb.jpg、c.jpgの3ファイルがあったとして

$txt = ls *.txt

$jpg = ls *.jpg

の型が違うのは気持ち悪い気はする
$txt.Countとか$txt[0]とやったり、逆に$jpg.Nameとかもできるんだけど
$jpg += $txtだとちゃんと追加される一方で、$txt += $jpgだとエラーになる
0221デフォルトの名無しさん
垢版 |
2017/08/09(水) 16:48:34.81ID:xf4P4t8V
好みや流儀より、単純にパイプの方がメンテナンス性が優れてるよ
>>214は実際やってみると小数点以下の羅列の後に"MB"が付いて見苦しくなる
でもパイプなら一部の修正だけですむ
%{"$($_)MB"} を %{"{0:.00}MB" -f $_} とか、
四捨五入して %{[math]::Floor($_+0.5)} | %{"$($_)MB"} とか
214の上でこれやろうとするとカッコばかりで暗号のようになる
0222デフォルトの名無しさん
垢版 |
2017/08/09(水) 16:52:13.45ID:xf4P4t8V
>>220
それはまたちょっと違う問題だね
その場合はこうやって強制的に配列にしろと教えられたよ

$txt = @(ls *.txt)
0225デフォルトの名無しさん
垢版 |
2017/08/09(水) 18:47:27.63ID:veHAq/rO
>>222
配列かスカラーか返される物が状況によって変わる気持ち悪さは昔からあちこちで散々言われてるね
0226デフォルトの名無しさん
垢版 |
2017/08/09(水) 19:38:02.86ID:LnmC5B+P
>>221
暗号ねぇ w
Write-Host ("{0:0.00}MB" -f (gps chrome | Measure-Object PM -sum).sum / 1mb))
ちなみに書式変換時は元々四捨五入なのでFloorとかは要らんよ
0227デフォルトの名無しさん
垢版 |
2017/08/09(水) 19:41:50.81ID:LnmC5B+P
>>225
配列を便利に扱えるようにしてるのはわかるけどちょっとやり過ぎかな
-eq 演算子なんてトラップ以外の何者でもないだろ
あと全然関係ないけど -isnull 演算子が欲しい
0228デフォルトの名無しさん
垢版 |
2017/08/09(水) 19:46:51.80ID:xf4P4t8V
>>226
[int]だけで四捨五入になるのは知ってるけど、分かりやすくした

暗号は言い過ぎたかもしれんが、そんなん書くより一度変数に入れたくならんか?w
0230デフォルトの名無しさん
垢版 |
2017/08/09(水) 20:10:17.94ID:LnmC5B+P
>>228
> そんなん書くより一度変数に入れたくならんか?w
この程度でなるか?
って話
程度は人によって違うからまあ好きにしなよ

>>229
スマホから書き込んでるから細かいところは目を瞑ってくれ
0231デフォルトの名無しさん
垢版 |
2017/08/09(水) 21:53:40.19ID:VOmW1luq
課長 「SumをMBで出してくれ」
A君 "{0:0.00}MB" -f ((gps chrome | Measure-Object PM -sum).sum / 1mb)
B君 gps chrome | Measure-Object PM -sum | %{[String]::format("{0:0.00}MB", $_.sum/1mb)}

課長 「すばらしい! じゃあついでにMax値とMin値もMBで出してちょうだい」
A君 「ぐぬぬ・・・」
B君 gps chrome | Measure-Object PM -sum -Maximum -Minimum | %{[String]::format("Sum: {0:0.00}MB`nMax: {1:0.00}MB`nMin: {2:0.00}MB", ($_.sum, $_.maximum, $_.minimum | %{$_/1mb}) )}
明美 「きゃーB君ステキ ブッチュー」
0232デフォルトの名無しさん
垢版 |
2017/08/09(水) 23:08:02.45ID:VOmW1luq
C君 gps chrome | Measure-Object PM -sum -Maximum -Minimum | %{$_.sum, $_.maximum, $_.minimum | %{$_/1mb}} | %{"{0:0.00}MB" -f $_}
明美 「キャー 抱いてぇー」
0233デフォルトの名無しさん
垢版 |
2017/08/10(木) 00:28:12.53ID:6XCllBcj
自分ならこうするかな
一行で書かなきゃいけないルールでもあるのか、その会社は

gps vivaldi | Measure-Object PM -sum -Maximum -Minimum| %{
foreach($i in 'Sum','Maximum','Minimum'){
"{0}: {1:0.00}MB" -f $i.Substring(0,3),($_.$i/1mb)
}
}
0236デフォルトの名無しさん
垢版 |
2017/08/13(日) 11:23:55.65ID:i2h5TtLX
多少は実用的なやつを。サブスレッドも合計してメモリ食ってるアプリのトップ3

Get-Process|Group Name|%{$_|Add-Member Length ($_.group|measure PM -Sum|%{$_.sum}) -PassThru}|
sort length -Descending|select -First 3|%{'{0}: {1:#,0.}MB'-f $_.name,($_.length/1mb)}
0237デフォルトの名無しさん
垢版 |
2017/08/16(水) 20:21:19.54ID:TEzkLuqt
初心者ですが質問です
ISEでデバックした時とスクリプトで実行した時で
GUI?の見た目が違うのですが(スクリプト実行だとGUIが古い感じ)
デバックしてる時と同じGUIにするにはどうすれば良いのでしょうか?
0238デフォルトの名無しさん
垢版 |
2017/08/16(水) 20:46:46.65ID:qxnt2v0K
>>237
デバッグね
0239デフォルトの名無しさん
垢版 |
2017/08/20(日) 16:38:06.37ID:+qRmeWmG
「マイクロソフト社製の基本ソフトを使うパソコン
に搭載されたシステム管理機能パワーシェル(PS)を操る(中略)
ファイルレス攻撃は、実行形式でないLNKなど別の拡張子のファイルが添付されている。
ウイルスの本体ではないため、単体では情報収集などの目的を果たせないが、
PSに命令する不正プログラムが含まれている(中略)
ウイルスを勝手にダウンロード(中略)
自分の存在を隠す」

「ファイルレス」見えないサイバー攻撃急増 政府・金融機関など標的(1/3ページ) - 産経ニュース
http://www.sankei.com/affairs/news/170820/afr1708200002-n1.html
2017.8.20 06:38
0240デフォルトの名無しさん
垢版 |
2017/09/05(火) 17:17:36.30ID:NCuJt1Zi
>>237
スクリプトで実行って関連付けで実行ってこと?
ISEとはUIが別ものだと思うけど
0242237
垢版 |
2017/09/08(金) 18:15:40.23ID:fHkqyhXS
>>240
レスありがとうございます
https://letspowershell.blogspot.jp/2015/07/powershell_9.html
こちらのブログで質問させて頂きまして無事解決しました

[System.Windows.Forms.Application]::EnableVisualStyles();
を追加して無事デバッグと同じフォームになりました
0243デフォルトの名無しさん
垢版 |
2017/09/08(金) 18:46:32.46ID:v1oxBnRc
質問です

set-location でパスを入力する時、日本語が含まれていると文字化けしてしまい
「Set-Location : パス 'C:\Users\nashi\Desktop\SHO\PDF 繧「繝励Μ' が存在しないため検出できません。」
と言われてしまいます。

バッチファイル?からではなく、powershellに直接入力した時は起こらないのですが
どうしても回避する方法がわかりません。

どなたか分からないでしょうか。
0245デフォルトの名無しさん
垢版 |
2017/10/08(日) 02:33:38.64ID:L3khK+9u
画面のスナップショットをF9キー辺りに割り当てて、
キーを押す度に連番ファイルとして保存したいんだけど
powershellで簡単にできたりする?
0246デフォルトの名無しさん
垢版 |
2017/10/08(日) 13:06:48.18ID:HosRocIl
>>245
> 画面のスナップショットをF9キー辺りに割り当てて、
PowerShellを呼び出すバッチファイルを書いてショートカットで呼び出すように設定
https://s.news.mynavi.jp/articles/2011/01/25/memo/002.html

> キーを押す度に連番ファイルとして保存したいんだけど
https://stackoverflow.com/questions/2969321/how-can-i-do-a-screen-capture-in-windows-powershell
0248デフォルトの名無しさん
垢版 |
2017/10/09(月) 15:36:12.56ID:aT/bMCXY
ps1ファイルの関連付けとか弄らずに、ダブルクリックで実行させたい場合って
wscriptのrunとかから呼ぶのが一般的ですか?(ファイルが2つになってしまう感じですか?)
0249デフォルトの名無しさん
垢版 |
2017/10/09(月) 18:30:22.51ID:lHNYO6zv
>>248
バッチファイルの存在を無視ですか?
0251デフォルトの名無しさん
垢版 |
2017/10/09(月) 19:54:07.67ID:nfbSpXzR
>>248
ExecutionPolicyも指定してラップできるから便利だね
ShellExecuteでrunas指定すれば管理権限で実行もできるし
0253デフォルトの名無しさん
垢版 |
2017/10/09(月) 21:06:20.91ID:TUH4S8FX
PSをダブルクリックで実行できれば便利だが
つねにそれが良いとは限らない

書きかけのバッチをうっかり実行して
データやマシンがおかしくなる場合もありえる
0254デフォルトの名無しさん
垢版 |
2017/10/10(火) 10:39:20.69ID:Lm1TOsWr
>>253
そんなレベルの人は他のことをしていてください。
0255デフォルトの名無しさん
垢版 |
2017/10/10(火) 10:40:53.91ID:Lm1TOsWr
だいたい間違って実行してしまわないようにクリックで実行できないようになっているというのに。
0256デフォルトの名無しさん
垢版 |
2017/10/10(火) 12:17:00.45ID:FT16hdt/
batもWSHもできるのにps1だけ対応しない理由はなんだろね
ポリシーなんてどうとでもなるのに
0257デフォルトの名無しさん
垢版 |
2017/10/10(火) 17:50:27.32ID:O+aWn4bz
>>252
ショートカットって記述的じゃないから嫌なんだよね
ショートカット作っても2ファイルだし、
それなら初めからwscriptから起動するよ
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況