18/10/09 17:46:48.32 G4IJkzod.net
前スレ
【最強CUI】PowerShell -Part 2
スレリンク(tech板)
2:デフォルトの名無しさん
18/10/09 18:49:55.04 iKGY38Kd.net
2
3:デフォルトの名無しさん
18/10/09 18:50:04.08 iKGY38Kd.net
3
4:デフォルトの名無しさん
18/10/09 19:38:35.78 cxSCuSqU.net
>>1乙
相変わらず潔いテンプレやね
5:デフォルトの名無しさん
18/10/09 22:51:28.21 o672s7jN.net
全スレの>>1000って何?
恐くて実行できない
6:デフォルトの名無しさん
18/10/09 22:55:38.49 06HomXwK.net
>>5
それくらい読めるだろ?
7:デフォルトの名無しさん
18/10/09 23:04:36.73 VXCTyrZC.net
@(1..1000; "complete!") -join " "
8:デフォルトの名無しさん
18/10/10 00:49:14.45 WXc1B6yp.net
>>5
実行してもツラツラと数字が表示されるだけ
作った本人だがセンスの無さが絶望的だと思う
9:デフォルトの名無しさん
18/10/10 13:22:57.24 mDHS4zfs.net
$popuko='';do{Write-Host ($pipimi = ($pptp = 'ポ', 'プ', 'テ', 'ピピック')[(Get-Random -Maximum 4)]) -No; $popuko += $pipimi; sleep -m 10}while($popuko -notmatch "ポプテピピック");"`r`n竹書房ゥァア゛ーッ"
10:デフォルトの名無しさん
18/10/10 18:48:47.75 EqFs8WH9.net
全部縦書きで出したほうがらしいきもする
11:デフォルトの名無しさん
18/10/10 20:26:48.74 l/74Fmoa.net
本日ハマったこと
下記スクリプトがWin10上でのv2環境ではエラーになる。5.1環境ならもちろん問題なし
$URL = "適当なURL"
$Client = New-Object System.Net.WebClient
$URL.split('/')|%{$Fname=$_}
$Of = Join-Path (Split-Path $MyInvocation.MyCommand.Path) -ChildPath $Fname
$Client.DownloadFile($URL, $Of)
さんざん悩んだが旧OSの実機で検証したら問題なし
Win10のv2環境は実機と動作が違うんだね…
12:デフォルトの名無しさん
18/10/10 20:31:23.38 DTc0bT+8.net
WebClientってたしかブラウザ依存じゃなかったか
13:デフォルトの名無しさん
18/10/10 20:49:55.87 e4JT9uU/.net
パワーシェルからプログラムを呼び出してsendkeyでキーを送りたいのですが
呼び出したプログラムをターゲットウィンドウ固定にできないでしょうか
たとえばnotepadを呼び出してキーを送ろうとしても別ウィンドウクリックしてしまうと別ウィンドウにキーが送られてしまいます
14:デフォルトの名無しさん
18/10/10 21:00:38.57 Vh016oEU.net
そもそもSendkeyでやることじゃない気がするぞ
15:デフォルトの名無しさん
18/10/10 21:19:54.19 e4JT9uU/.net
んなこときーてねえんだが
16:デフォルトの名無しさん
18/10/10 21:26:48.73 PNSFIUfW.net
豹変した!
17:デフォルトの名無しさん
18/10/10 21:29:15.76 Vh016oEU.net
豹変してて草
Sendkeyなんていう不安定なものを使う意図が本当に分からん
18:デフォルトの名無しさん
18/10/10 21:33:58.33 KxybdFNG.net
RPAをPowerShellでやろうってことだろ
19:デフォルトの名無しさん
18/10/10 21:55:05.74 WXc1B6yp.net
add-type -AssemblyName microsoft.VisualBasic
$process = Get-Process |? {$_.MainWindowTitle -match "(探したいウィンドウタイトル)"}
[Microsoft.VisualBasic.Interaction]::AppActivate($process.ID)
とかやっとけば良くね?
PowerShell Coreじゃ動かんけどね
20:デフォルトの名無しさん
18/10/10 21:58:14.41 u0QSMs+t.net
RPAとか言い出すとほぼCoreで動かない物が出来上がりそう
21:デフォルトの名無しさん
18/10/10 21:59:28.00 EqFs8WH9.net
vista以降だとタスクバーペカるだけで最前面に来ないんよね
スクリプト手動実行なら動くんやけどさ
22:デフォルトの名無しさん
18/10/10 22:38:55.64 l/74Fmoa.net
Appactivateって結局そのウィンドウフォアグラウンドになるんでは?
背面のアプリに文字入力したいならいずれにせよSendkeysではムリ、
UWSCとかだとsenfstr(ID
,"文字列")とかで出来る
23:デフォルトの名無しさん
18/10/10 22:40:28.02 l/74Fmoa.net
Powershell用だと UI Autmation Extentionを使えば出来るのかも。試してはいないが
24:デフォルトの名無しさん
18/10/10 22:46:11.90 e4JT9uU/.net
外部ソフトではなく、ウィンドウズ標準が良いです
なのでvbsでも良いですが
もしくはフォーカスでなくても常に最前面表示とかでもキー送れるのかな
25:デフォルトの名無しさん
18/10/10 23:14:15.15 DK5DBWJW.net
alt+tab
26:デフォルトの名無しさん
18/10/11 00:16:15.07 fgwsjZre.net
$code = @'
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();
'@
Add-Type $code -Name Utils -Namespace Win32
Add-Type -AssemblyName System.Windows.Forms
if($ps = Get-Process|? {$_.MainWindowTitle -like "*メモ帳"}|Select-Object -First 1){
do{
[System.Windows.Forms.SendKeys]::SendWait("%+{TAB}")
Start-Sleep -m 100
$hwnd = [Win32.Utils]::GetForegroundWindow()
}while($hwnd -ne $ps.MainWindowHandle)
}
こんな感じ?
27:デフォルトの名無しさん
18/10/11 16:11:44.71 Jfs/paLB.net
Powershell使いこなすにはC#の知識にも手を出さないとダメかな
.NET使う時点でライブラリの知識いるけど
プロググラム経験無い自分には結構大変だわ
28:デフォルトの名無しさん
18/10/11 17:29:30.69 DkVh6b/o.net
本日ハマり事案
下記スクリプトでは、なぜかRead-Host実行後にGet-Processの結果が表示されてしまう。なーぜだ?
Get-process|?{$_.MainWindowHandle -ne 0}|Select-Object ID,MainWindowHandle,Name,MainWindowTitle
read-host "Enterで終了します"
29:デフォルトの名無しさん
18/10/11 18:43:52.29 BCqcg04E.net
>>28
read-host実行前にget-processの結果でるよ
何が問題なのかわかんない
30:デフォルトの名無しさん
18/10/11 18:49:10.11 DkVh6b/o.net
>>29
?自分のマシンでは出ないんだよね
Windows10 1803で $PSVersionTable
PSVersion 5.1.17134.228
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.17134.228
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
なぜか
Get-Process の行のラストに |Format-Table
付ければ治るんだけど。それが見つかるまでああでもないこうでもないと2時間くらい……
31:デフォルトの名無しさん
18/10/11 19:21:50.18 fgwsjZre.net
ふつうにOut-Hostでいいんじゃね
32:デフォルトの名無しさん
18/10/11 19:22:00.95 oXF4megk.net
セミコロンで繋げると再現する
Get-process|?{$_.MainWindowHandle -ne 0}|Select-Object ID,MainWindowHandle,Name,MainWindowTitle; read-host "Enterで終了します"
33:デフォルトの名無しさん
18/10/11 19:25:28.95 oXF4megk.net
1行目の最後にOut-Hostをはさむと意図通りになる
Get-process|?{$_.MainWindowHandle -ne 0}|Select-Object ID,MainWindowHandle,Name,MainWindowTitle | Out-Host; read-host "Enterで終了します"
なんでかね
34:デフォルトの名無しさん
18/10/11 19:36:48.45 BCqcg04E.net
こっちは1809だが-Version 2 指定してもセミコロンで繋いでも問題が再現しないよ
PowerShell core 6.1でも問題でない
$PSVersionTable
PSVersion 5.1.17763.1
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.17763.1
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
35:デフォルトの名無しさん
18/10/11 19:38:43.55 DkVh6b/o.net
どうも Select-Object のバグっぽい
Get-ChildItem |Select BaseName でも起きる
Selectが後にパイプの別処理か、標準入力から改行受け取らないとコマンド終了判定できないっぽい
36:デフォルトの名無しさん
18/10/11 19:39:17.99 oXF4megk.net
>>32-33の$PSVersionTable
Name Value
---- -----
PSVersion 5.0.10586.117
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.10586.117
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
37:デフォルトの名無しさん
18/10/11 19:42:49.06 DkVh6b/o.net
>>34
お、そうなのか
5.1.17134.228 単体問題かなあ powershell v 2起動ではこちらも大丈夫だったよ
38:デフォルトの名無しさん
18/10/11 19:45:57.86 oXF4megk.net
-Version 2指定で大丈夫だった。ps5のバグだね
39:デフォルトの名無しさん
18/10/11 19:46:58.10 DkVh6b/o.net
>>36
Out-Host はこちらでも有効でした。
そちらの環境では; なしのps1スクリプトでは再現しないということだよね
40:デフォルトの名無しさん
18/10/11 19:48:49.97 oXF4megk.net
>>39
その通り
複数行 →再現せず
セミコロンで1行 →再現
41:デフォルトの名無しさん
18/10/11 19:50:56.75 DkVh6b/o.net
>>40
明瞭な回答ありがとうございました。
色々わかって胸のつかえがとれたよ、ありがとう>All
42:デフォルトの名無しさん
18/10/11 19:53:12.89 BCqcg04E.net
地味に嫌なバグだな
43:デフォルトの名無しさん
18/10/11 20:12:08.43 e56c6hX7.net
>>27
簡単なコマンドレットだけ使うところから
始めても十分実用になると思う
.NET(の知識)は拡張に便利だけど必須じゃない
44:デフォルトの名無しさん
18/10/11 20:17:09.29 GeJE+9Ij.net
PSって時々変な挙動する
逐次処理型のコンソールプログラムを直接実行した時はなんの問題もないのに
PSコンソールから同じ物を呼ぶとたまに固まる現象は未だに原因不明
しかも何故かエンターキー押したら進み出すから意味わからん
一見するとそのコンソールプログラムの問題かと思うけど違うプログラムでも発生するからPSが原因なのは確か
45:デフォルトの名無しさん
18/10/12 13:57:06.10 Vm21lImY.net
PowerShell 6.1って既存のPowershell 5.1 Desktop版と共存できる?
できるなら入れてみようかな
46:デフォルトの名無しさん
18/10/12 14:49:07.51 LyO2C2Nx.net
別物やから気にせず入れればええ
47:デフォルトの名無しさん
18/10/12 17:23:13.60 Vm21lImY.net
>>46
ありがとう、やってみます
48:デフォルトの名無しさん
18/10/12 18:16:36.74 tfCNN8gU.net
パワーシェルやバッチから汎用資格情報を利用してリモートデスクトップを起動・接続したいのですが、パワーシェルのcuiでパスワード入力が必ず要求されてしまいます
資格情報は正常に登録されています
これはどう回避すれば良いでしょうか?コマンドではなく、セキュリティポリシーの問題ですか?
49:デフォルトの名無しさん
18/10/12 18:50:34.83 VxeOAG4j.net
>>48
RDP接続部分どんなコードなのさ
50:デフォルトの名無しさん
18/10/12 18:58:42.49 tfCNN8gU.net
cmdkey /generic:ipアドレス /user:ユーザ名 /password : パスワード
のコマンドで資格情報登録後、
mstsc /v ipアドレス
のコマンドでリモデ呼び出しています
リモデ呼び出してcuiでパスワード入力要求されてしまうので、入力すれば起動するような感じになってしまってます
51:デフォルトの名無しさん
18/10/12 19:06:14.75 VxeOAG4j.net
>>50
>CMDKEY [{/add:ターゲット名 | /generic:ターゲット名}] [/smartcard] [/user:ユーザー名 [/pass[:パスワード]] [/delete{:ターゲット名 | /ras}] [/list[:ターゲット名]]
って構文だけど
>password : パスワード
のところでパス登録できてないんじゃね?
詳しくねーけど
52:デフォルトの名無しさん
18/10/12 19:28:53.77 tfCNN8gU.net
あーパスワードじゃなくて、パスか
そこの違いかな
53:デフォルトの名無しさん
18/10/12 19:36:20.86 VxeOAG4j.net
やってみたらpasswordでも通ったわ...
関係なさそう
54:デフォルトの名無しさん
18/10/12 19:51:45.48 Vm21lImY.net
こっちの問題じゃないの?
「Windows 資格情報を構成すると、接続先サーバーへユーザー名やパスワードを都度入力することなく、RDPなどで接続できるようになります。
しかし、既定では資格情報を利用したRDP接続は無効化された状態です。そのため、ローカルセキュリティポリシーやグループポリシーを利用して、資格情報を利用した接続を許可する必要があります。」
URLリンク(mhiroblog.wordpress.com)
55:デフォルトの名無しさん
18/10/12 21:45:22.73 tfCNN8gU.net
おお、ポリシーの問題ですかね
56:デフォルトの名無しさん
18/10/12 21:53:31.40 3rr2tBek.net
まず問題の切分をしようよ
・GUIで普通に接続する時はログインを省略出来るのか
・コマンドプロンプトでコマンド直打ちした際はどうなるのか
正直言えばPS関係あるの?って話なんだが
57:デフォルトの名無しさん
18/10/12 22:03:41.12 Vm21lImY.net
まあ多分関係ないね、下記で訊いた方がいいかもしれん
リモートデスクトップ&リモートアシスタンス 6
スレリンク(win板)
58:デフォルトの名無しさん
18/10/12 22:51:10.68 tfCNN8gU.net
あ、すみませんでした
そこのスレで同じく聞いてみます
59:デフォルトの名無しさん
18/10/15 20:17:08.40 amvePWoq.net
バッチファイルのコードをパワーシェルに変換できるツールってないんでしょうか?
60:デフォルトの名無しさん
18/10/15 20:44:11.37 iq0D/NFF.net
本買って勉強しろ
61:デフォルトの名無しさん
18/10/15 21:34:07.14 E6pr56BO.net
私たち日本人の、日本国憲法を改正しましょう。
総ム省の、『憲法改正國民投票法』、でググって
みてください。拡散も含め、お願い致します。
62:デフォルトの名無しさん
18/10/16 00:47:27.56 J45RURl2.net
>>59
環境変数Pathの設定ですら書き方が微妙に違うからな
一括変換は無理
63:デフォルトの名無しさん
18/10/16 00:49:24.42 J45RURl2.net
>>58
過疎スレに聞きに行ってなくてワロタで
64:デフォルトの名無しさん
18/10/16 07:15:58.35 CAcWp+n6.net
過疎スレに誘導しといてあんまワロえないわ
65:デフォルトの名無しさん
18/10/16 11:41:07.30 7RIuHdb8.net
こういうインフラ系の疑問ってQAサイト無いのかな?
teratailはプログラム関係以外お断りっぽいし、stackoverflowかね、知恵遅れは質が悪くて
66:デフォルトの名無しさん
18/10/16 12:07:46.38 s3pweWJX.net
パワーシェルのifで数字を比較するとき、 1<5>10
のように複数の演算子使うことできますか?
67:デフォルトの名無しさん
18/10/16 12:28:15.06 G4QqtY7K.net
できません
68:デフォルトの名無しさん
18/10/16 12:41:57.06 CgKK5Phn.net
できないよ
1 -lt 5 -lt 10とかやっても、1 -lt 5がTrue、True -lt 10でFalse
69:デフォルトの名無しさん
18/10/16 14:04:55.30 7RIuHdb8.net
if (1 -lt 5 -and 5 -lt 10)
70:デフォルトの名無しさん
18/10/16 19:33:54.39 h2O8wdlC.net
パワーシェルなんで不等号使えないんでしょなね
71:デフォルトの名無しさん
18/10/16 20:10:31.71 cDpTxUsb.net
リダイレクトに不等号使ったから
72:デフォルトの名無しさん
18/10/16 20:23:24.10 h2O8wdlC.net
ああ、そういやそうか
73:デフォルトの名無しさん
18/10/16 20:41:51.75 7RIuHdb8.net
DOSコマンドプロンプトの伝統を引き継いだ説
equ → -eq
neq → -ne
lss → -lt
leq → -le
gtr → -gt
geq → -ge
74:デフォルトの名無しさん
18/10/16 20:45:56.62 7RIuHdb8.net
DOSの時中途半端にUnix真似たのを今度は揃えたっていうのが正しいか
75:デフォルトの名無しさん
18/10/16 20:58:38.76 tHbhOnY/.net
コマンドプロンプト互換用にリダイレクトは要るけどPowerShell的には使い道あんまり無い気がする
76:デフォルトの名無しさん
18/10/16 23:56:23.47 VMcjBADQ.net
普通にfortranの比較演算子だからな
77:デフォルトの名無しさん
18/10/17 04:23:05.21 fXyyO1tZ.net
いやFortranでもDOSでもなくてシェルスクリプトを意識してるでしょ
Fortranなら.GT.とかだし<>=も使える
78:デフォルトの名無しさん
18/10/17 22:05:24.45 Ny9Q/0jK.net
また低学歴知恵遅れの知ったかがテキトーなこといってるわ。。。
昔のfortranは<>=なんか使えない
あとな、シェルスクリプトなんかよりfortranのほうが
はるかに歴史が古い
79:デフォルトの名無しさん
18/10/17 23:43:13.88 uJo2tnoC.net
やっとPowershell core 6.1入れてみた。
defaultがUTF-8に変わって
sjisテキストの入出力は難しくなった。
-encoding ([System.Text.Encoding]::GetEncoding(932))と書くか-encoding oemならまだ通るんだね
80:デフォルトの名無しさん
18/10/18 17:54:54.30 VXAXqhVo.net
非常に浅学で申し訳ないんだがScreenshot_2017-09-14-00-32-38では下のURLのプログラムは機能するんだけどScreenshot_20170914-003238ってファイル名だとどうイジれば対応させられますかね…?
1日あれこれ調べたけどregexの正規表現の羅列あたりが特によく分からなかった。出来ればご教示お願いします。
URLリンク(bannan.hatenadiary.jp)
/entry/2018/04/10/210807
81:デフォルトの名無しさん
18/10/18 19:03:43.40 RGjTx9dN.net
>>80
これでいいよ
下手に汎用性もたせようとするとそんな風に失敗してるものができる
ls -file | where name -match "Screenshot_(\d{4})(\d{2})(\d{2})-(\d{2})(\d{2})(\d{2})" |
foreach { $_.CreationTime = $_.LastWriteTime = "{0}/{1}/{2} {3}:{4}:{5}" -f $Matches[1..6]; $_ }
read-host "何かキーを押すと終了"
82:デフォルトの名無しさん
18/10/18 19:36:40.46 vpgDyIt0.net
代入の二段重ねなんて出来るんだw
83:デフォルトの名無しさん
18/10/18 19:53:20.76 nSVk5plj.net
$a = $b = 1ってできるじゃん
84:>>80
18/10/18 23:03:06.79 AkEYj+KW.net
>>81
おお、サンプルまで作って頂きありがとうございます!!
瞬く間に1000枚に情報入力出来ました!
where nameの働きと-f $Matchesの左右の表現が調べても最後までピンと来なかったのでもっと学んで見たいと思います
85:デフォルトの名無しさん
18/10/23 11:35:11.62 Hcq+1RfE.net
PowerShellってキャリア採用の条件で提示するようなもん?
・PowerShellができる方
ってどこまで理解していればこれに該当するかな
86:デフォルトの名無しさん
18/10/23 12:52:00.21 0PL1FVew.net
案件列挙すればいいんじゃね
87:デフォルトの名無しさん
18/10/23 19:08:54.72 R3+D42hK.net
パワーシェル単体ではちょっと弱い
パワーシェル扱ってるということはインフラ系だと思うからプラスアルファでvbaやvbsなどインフラ系スクリプト言語やAJSなどのバッチサーバの経験がほしい
88:デフォルトの名無しさん
18/10/23 21:27:43.17 JY03xd2e.net
いらんわそんなの
89:デフォルトの名無しさん
18/10/23 21:36:09.49 Cxf5lQdo.net
パワーシェルだけじゃ仕事ないっていう観点はあっている
90:デフォルトの名無しさん
18/10/23 21:56:38.39 xD54VN5l.net
クセと多いがpowershell好きw
できるだけ小文字で書きたいのだが、インテリセンスが大文字混ぜるのをなんとかしたい、なにか手はある?
あとパラメータとか短縮表記になったのを伸ばすツールある?
91:デフォルトの名無しさん
18/10/24 07:53:58.83 XShW8ZKK.net
>>90
補正のないエディタを使う
92:デフォルトの名無しさん
18/10/24 08:55:14.55 paw2wRgq.net
PowerShellEditorServicesはオープンソースだから改造すればえんちゃう
93:デフォルトの名無しさん
18/10/24 15:40:32.38 +Ub61VYb.net
クリップコマンド使うとなぜか改行がはいってしまいます、改善策ないでしょうか?
"test" |clip
で、メモ帳などに貼り付けると改行ついていて不都合があります!
94:デフォルトの名無しさん
18/10/24 17:13:32.82 K/10T0Yf.net
set-clipboardコマンドレット使えば行けそう
今はテスト出来ないしPowershell5.0以降が必要だけど(Windows10なら標準)
95:デフォルトの名無しさん
18/10/24 18:07:46.88 +Ub61VYb.net
Windowsサーバ2012r2なんですがそのコマンドあるかな・・・
96:デフォルトの名無しさん
18/10/24 18:33:39.42 +Ub61VYb.net
ちなみにですがバッチファイルだと下のコマンドで改行なしにできるのですが、パワーシェルからからこのコマンド呼び出すと<がリダイレクトマークなのでつかえません!ってエラーがでます
このコマンドをパワーシェルで使う方法などありますか?
set /p <nul="test" | clip
97:デフォルトの名無しさん
18/10/24 18:49:21.75 TznUYXv0.net
>>96
cmd /c 'set /p <nul="test" | clip'
98:デフォルトの名無しさん
18/10/24 19:01:25.53 +Ub61VYb.net
コマンドプロンプト部分をシングルコーテートでくくってcmdのオプションで/cつければ他のコマンドも実行できるんですか?
試してみます、ありがとうございます
99:デフォルトの名無しさん
18/10/24 19:04:05.43 SZPDhNVG.net
>>95
2012R2だとPowerShell4.0だね。5.0にするならWMF5.1のインストールが必要みたい
ちなみにset-clipboardだと改行は入らなかった
100:デフォルトの名無しさん
18/10/24 20:12:04.59 SZPDhNVG.net
Win10 1809のWin Powershellなんだけど
powershell -Version 3.0
でも$PSVersionTableで3.0にならない
2.0だと変わる、バグかな
101:デフォルトの名無しさん
18/10/25 03:52:38.91 BKSYttF8.net
基本的なことですいません。
tab補完で、最初にカレントディレクトリの./がつくのをつかないようにできませんか。
javaを実行するときjava ./hogehogeとなって、いちいち./消すのが面倒なもので
102:デフォルトの名無しさん
18/10/25 06:11:52.99 IIA5RA/7.net
>>101
意味わからん
カレントフォルダのJavaプログラムを実行するのだから./は要るだろ
103:デフォルトの名無しさん
18/10/25 17:13:59.66 ehGwymsw.net
PowerShellはコマンドプロンプトと同じように使おうとしてハマる奴多いな
コマンドプロンプトとは別物として考えた方が良いと思うんだけど
104:デフォルトの名無しさん
18/10/25 20:14:57.95 UAZv//mL.net
javaはファイル名じゃないでしょ
105:デフォルトの名無しさん
18/10/25 23:48:32.38 BKSYttF8.net
>>102
>javac hogehoge.java
>java hogehoge
としたいんです。
javaで実行くるときはファイルではなく、クラスを指定するので、カレントディレクトリの指定があると実行できないんです。
106:デフォルトの名無しさん
18/10/26 00:09:24.34 AQgJ1GgH.net
普通はIDE使うんですけどね
107:デフォルトの名無しさん
18/10/26 02:42:44.17 +qiDmRnL.net
>>105
java hogehogeって書いたスクリプトファイルを用意したらいいんじゃね?
108:デフォルトの名無しさん
18/10/26 03:54:22.79 9wT1H/41.net
>>105
何で./があると実行できないのか俺にはわからんが
そのjavaというプログラムの第一引数は単なるファイル名ではないってことか
PowerShellウィンドウとは相性が悪いプログラムってことだな
上にあるようにIDEを使うか、コマンドプロンプトで使うしかないだろう
109:デフォルトの名無しさん
18/10/26 06:31:22.94 FXq8Nzbn.net
Powershellの自動補完のせいじゃないだろ、そんな所でtabを叩く操作がおかしい
110:デフォルトの名無しさん
18/10/26 07:44:23.03 fUEsFsck.net
いちいち手作業が面倒くさいときこそシェルスクリプトを書くべきじゃまいか
引数のパスからクラス名を取り出して他の引数はそのままjava.exeに渡す
このスクリプトにパスを通しておく
coかcomまで辿ればパッケージにも対応できるな
111:デフォルトの名無しさん
18/10/26 07:45:45.75 fUEsFsck.net
coじゃなくてjpだった
112:デフォルトの名無しさん
18/10/26 14:40:25.23 9NaxqrWo.net
>>107
確かに。
ありがとうございます。
そうします。
113:デフォルトの名無しさん
18/10/26 14:44:17.82 9NaxqrWo.net
>>109
クラス名をフルで手入力ですか?
114:デフォルトの名無しさん
18/10/26 18:35:01.07 zbWSKzqB.net
プログラムとスクリプトとシェルの違いって何ですか?
パワーシェルは何?
115:デフォルトの名無しさん
18/10/26 18:46:34.50 xBIHPZW8.net
コマンドプロンプト・PowerShell・bash は、コマンドを入力できるから、シェル
コマンドプロンプト用に、ファイルに書いたプログラムは、バッチファイル。
PowerShell・bash用に、ファイルに書いたプログラムは、シェルスクリプト
116:デフォルトの名無しさん
18/10/26 19:16:08.67 6wLQ7f7d.net
>>105
Java11使え。
java ./hogehoge.java
117:デフォルトの名無しさん
18/10/26 19:30:22.59 FXq8Nzbn.net
クラスファイルに.class 拡張子は付いてないという前提でラクそうな方法
java -classpath
まで入れて、ファイル名一部入力してtab
.\Hogeが保管されるので
Ctrl+←で一回おすと\の後の文字に飛ぶ。
そこでスペースキー
java -classpath .\ Hoge
Javaは拡張子は見ませんだの、ファイル名見ませんだの、大文字小文字区別だのいろいろ面倒ね
118:デフォルトの名無しさん
18/10/26 20:11:54.17 AQgJ1GgH.net
>>113
Linuxでzsh使おうね
119:デフォルトの名無しさん
18/10/26 20:14:30.49 mtqgcbcu.net
ComObjectみたいにJavaObjectをNewできたら便利だとおもう
Java相互運用ラッパーを自動生成するコマンドレットない?
120:デフォルトの名無しさん
18/10/27 11:50:26.09 E3+jW7oE.net
>>116
11からコンパイルいらないんでしたっけ?便利ですよね。
結局プロファイルでmyjavaっていう11みたいに動作するようにしました。
121:デフォルトの名無しさん
18/10/28 22:43:03.45 cS/B+JtL.net
PowerShell Core 6.1 の新機能
URLリンク(docs.microsoft.com)
122:デフォルトの名無しさん
18/10/29 21:10:57.38 UusL+Srb.net
>>121
最近追ってなかったから知らんかったけど
Markdownに対応してんやね
びっくりやわ
123:デフォルトの名無しさん
18/10/30 00:22:31.97 LZVff6s3.net
パワーシェルやバッチってプログラム言語と言えるの?
124:デフォルトの名無しさん
18/10/30 04:04:48.57 ZaLbntHv.net
シェルスクリプト(awk sed,perl)含むの記述がプログラムか?と問われたら是非別れるのと同じ気がする。用法、組み方によるのでは?
各種言語を切り貼り利用できるグルー言語資質と、プロトタイピング性に優れてる。
データ扱いが常にオブジェクトというのがそれらと大きく異質。
125:デフォルトの名無しさん
18/10/30 06:32:05.32 aroewsdA.net
>>123
あなたのプログラム言語の定義は?
126:デフォルトの名無しさん
18/10/30 07:27:28.27 H5WVH8ZO.net
一般的な基準として、チューリング完全な、プログラムを記述するための形式言語ならプログラミング言語
Powershellはbrainf*ckインタープリタを書けるらしいのでチューリング完全
だからプログラミング言語と言って差し支えない
127:デフォルトの名無しさん
18/10/30 07:50:51.52 wAgTgtJ2.net
>>122
21世紀のnroffだわな
128:デフォルトの名無しさん
18/10/30 19:29:22.59 5BbWkodl.net
WindowsPEのvbsがシステムフォントの変更によって使い物にならなくなったので
PowerShellでフォントを指定したメッセージボックスを使いたいです。
インプットボックスでフォントを指定したサンプルは見つけましたが
メッセージボックス版が見つけられません。
コードを教えていただけますでしょうか。
バッチスレの住人でPowerShellは門外漢
129:なのです。
130:デフォルトの名無しさん
18/10/30 20:40:30.78 LZVff6s3.net
よくわからんけどmsgコマンドじゃあかんの?
131:デフォルトの名無しさん
18/10/30 21:16:30.95 J8L+p3HY.net
>>129
WindowsのPro版にある「Msg.exe」の事ですか?
WindowsPEに有りませんし、持って来ても動きませんでした。
WindowsPEはx86のexeをx64で動かせないので
x86しかexeが無い場合は使えません。
その点、スクリプトはビット数を選ばないので都合がいいのです。
132:デフォルトの名無しさん
18/10/30 21:25:14.89 eTO/K+Ns.net
Add-Type -Assembly System.Windows.Forms
[System.Windows.Forms.MessageBox]::Show("メッセージ", "タイトル")
で行けるかね?
PEでWindowsForms使えるか分からんけど
133:デフォルトの名無しさん
18/10/30 21:41:00.25 OyNBi9EH.net
そもそもPEなんてしょぼ環境にPowershellや.NETランタイム入ってるんだっけ
逆にPSが動作するぐらいならSysWOW64ぐらい入っててもよさそうだが
134:デフォルトの名無しさん
18/10/30 21:41:13.95 J8L+p3HY.net
>>131
それは動きました。
でも、フォントサイズとフォントを指定したいのです。
135:デフォルトの名無しさん
18/10/30 22:39:58.99 ZaLbntHv.net
インプットボックスのサンプルこれか?
URLリンク(docs.microsoft.com)
これなら、テキストBOX削ってカスタマイズすりゃいいんじゃ?
136:デフォルトの名無しさん
18/10/31 01:30:38.10 FlI1cXqx.net
バッチから引数付きで呼び出す時に、引数 ※param() でエラーが出た時って
%ERRORLEVEL% は 0 ですよね?
trapやtry~catchもできないし。。。
param での例外を判定する方法はないでしょうか
137:デフォルトの名無しさん
18/10/31 10:46:10.57 7QmHbGvy.net
WindowsFormsつかってフォントかえるなら
FormつくってLabelのfontに
Add-Type -AssemblyName System.Drawing
$Font = New-Object System.Drawing.Font("メイリオ",18)
でぶち込むくらいしか知らねい
138:デフォルトの名無しさん
18/10/31 19:08:52.44 TK2x4mB7.net
>>135
Powershellをバッチの部品として使うのは非効率だしなぁ
Powershellスクリプトで書けば良くない?
引数のエラー処理なんて関数ごとtry~catchすりゃいいし
139:デフォルトの名無しさん
18/10/31 19:25:39.36 zoWehdgp.net
今更ながらに気が付いた話。
大容量のcsvファイルをimport-csvで読むとメモリーの問題があり・・・・
と思い込んでいたんだけど。
.NETが基本なんで、もしかして中身はIEnumerable利用なんかな?
と思い、ためしに130万件で20項目のデータを使って
import-csv をそのままパイプでgroup-objectにつないで集計してみたら
何の問題もなく結果が得られた。
そうだよね、遅延実行してくれてるんだよね。
処理速度は別として、1億件でもメモリー圧迫なしで処理できるんだ。
自作コマンドレット作ると、デカいデータをPowerShell使った処理が
可能だな。
と気が付いた次第。
皆にとっては当たり前かもしれんけど、いま気が付いたよ。
140:デフォルトの名無しさん
18/10/31 20:54:57.34 2eQnYqe5.net
>>134
>>136
すみませんが、その説明でも分からないレベルですので
コードを全て教えて頂けないでしょうか。
Formとかlabelとか全然分からないのです。
141:デフォルトの名無しさん
18/10/31 21:31:23.96 1CGtBgIK.net
135です
自己解決しました
>>137
既存の置き換えなのでそうもいかないのです^^;
結局、呼び出したps1ファイルの中で関数化してInvoke-commandでスクリプトブロックを呼び出しました
142:138
18/10/31 22:05:02.46 zoWehdgp.net
PCで時間計測してみた
819万件20項目のCSVファイルで2項目を指定したクロス集計。
CSV読み込みからクロス集計まで。
環境はmac mini。OSはwin7
結果:17分16秒
まあ許せるんじゃないでしょうか。
ついでなんでSASで同じことをやってみた、読み込みからクロス集計。
結果:0分9秒
・・・・・・がっくり
143:デフォルトの名無しさん
18/10/31 22:11:26.13 khMCZPOm.net
SASって何?
144:デフォルトの名無しさん
18/10/31 22:13:11.37 7QmHbGvy.net
>>139
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$form = New-Object System.Windows.Forms.Form
$form.Text = "タイトル"
$form.Size = New-Object System.Drawing.Size(260,180)
$form.StartPosition = "CenterScreen"
$form.MaximizeBox = $false
$form.MinimizeBox = $false
$form.FormBorderStyle = "FixedSingle"
$OKButton = New-Object System.Windows.Forms.Button
$OKButton.Location = New-Object System.Drawing.Point(130,100)
$OKButton.Size = New-Object System.Drawing.Size(75,30)
$OKButton.Text = "OK"
$OKButton.DialogResult = [System.Windows.Forms.DialogResult]::OK
$form.AcceptButton = $OKButton
$form.Controls.Add($OKButton)
145:デフォルトの名無しさん
18/10/31 22:13:40.92 7QmHbGvy.net
>>139
$Font = New-Object System.Drawing.Font("メイリオ",18)
$label = New-Object System.Windows.Forms.Label
$label.Location = New-Object System.Drawing.Point(10,30)
$label.Size = New-Object System.Drawing.Size(250,30)
$label.Text = "メッセージ"
$label.font = $Font
$form.Controls.Add($label)
$form.Topmost = $True
$result = $form.ShowDialog()
146:デフォルトの名無しさん
18/10/31 22:26:30.11 zoWehdgp.net
統計関係で有名なソフト
データ加工がめちゃ便利で速い。値段が高い。
GoogleやAppleが会社(仕事環境:オフィスや会社の環境)は
SASの本社(SAS Institute)を参考にしたそうだ。
147:デフォルトの名無しさん
18/10/31 22:30:05.21 7QmHbGvy.net
はぁそうですか
148:デフォルトの名無しさん
18/10/31 22:37:39.56 zoWehdgp.net
私のデスクトップ環境で、ソフト年間レンタル初年度120万、次年度60万円
個人じゃ買えないよね~。でも金融機関や大手の分析BI系(統計やマイニング)は
ほとんどこのソフト。DBもETLもいらないんであとはExcelがあればいいという感じ。
このソフト入れると、DBはただの元データ置き場になっちゃって、皆これをDB代わり
にも使ってしまうことが多い。ただ高いので結構利用部門とか限定される事も多い。
149:138
18/10/31 22:50:51.47 zoWehdgp.net
ついでに、機械学習(マイニング・AI)専用のKNIME(これはフリー)で
同じこと(819万件20項目のCSV読み込みと2項目のクロス集計)をやってみた。
結果:3分48秒
PowerShell遅かったけど、十分実用性あると思うわ。
一般のツール使ったらやはり10分位はかかると思うんで。
150:デフォルトの名無しさん
18/11/01 00:33:44.20 PBz6MbCm.net
>>138
PowerShell は遅延実行だったのか
Ruby では、外部イタレータのEnumerator なら遅延実行になる
Enumeratorから、to_a して配列の実体を作ると、全部読み込まれてしまうから、
ずっと、Enumeratorを返すメソッドをチェーンしていって、最後にストリーム処理する
Java のStream とか、C# のLinq みたいな感じ
151:デフォルトの名無しさん
18/11/01 01:13:45.19 c7Wqsl8P.net
Powershellパフォーマンス計測やってたブログで
パイプラインは遅延実行でメモリ使用は少ないけど遅い
foreach(foreach-objectフィルタじゃなくてコマンドの方)はオブジェクトをメモリに読み込むからリソース使うけど速い
とかテストしていた所があった
ただ結構昔の記事だから最近のバージョンだと違うかも
152:デフォルトの名無しさん
18/11/01 06:23:45.61 mmcP2r/K.net
>>14
153:9 >Java のStream とか、C# のLinq みたいな感じ まさにLinqの形なんですね。C#でLinq使ってみて、もしかして・・・と思って テストしてみたい次第。 >>150 foreach速いのかな? 逆にすげー遅いんじゃないかと思ってだんたけど、どうなんだろう。 場合によると、それはforに対するforeachの話かもしれない。 ちょっとデータが大きくなると、利用していなかったけど、少しくらい大きい ものなら、PowerShell結構使い物になることが分かったので、ツール作ろうかと 思って来ましたよ。コマンドレットを独自に作れば結構なことが出来そう。
154:デフォルトの名無しさん
18/11/01 06:25:15.55 mmcP2r/K.net
>>149
>まさにLinqの形なんですね。C#でLinq使ってみて、もしかして・・・と思って
>テストしてみたい次第。
間違った
「テストしてみた次第」
155:デフォルトの名無しさん
18/11/01 09:18:53.50 xoDC1qBI.net
遅延実行とパイプラインは違うよ
遅延実行はオンデマンドの処理で、並行処理になるか一括実行になるかは無関係
イメージとしてはプロキシ
パイプは次を待たずに通常バッファリングされながら並行処理されるもの
イメージはCPUの命令パイプラインそのもの
156:デフォルトの名無しさん
18/11/01 09:21:29.14 NMd92bWG.net
>>151
確かここのサイト
URLリンク(tech.guitarrapc.com)
Powershell3.0での結果らしい
forとforeachとforeach-object(パイプライン使用)とかの比較
データサイズやら構造で違いはありそう
.foreach()メソッドでも動作は変わるらしい
foreachだけでコマンド、フィルター、メソッドと3種類あるとか自分にはついていけなかった
157:デフォルトの名無しさん
18/11/01 09:40:09.66 NMd92bWG.net
>>153
わかってなかったわ
遅延実行やら並行処理やらの勉強やら検証方法やら勉強して出直さないとダメだなぁ
158:デフォルトの名無しさん
18/11/01 09:48:43.50 mmcP2r/K.net
>>154
あ~、これは今回の参考にならないかも
わたしも、ずっと似たような考えをしていたんですよ。
このサイトの例では、一度変数に入れてから、別な処理を
行うという処理なので、遅延実行がされていないです。
私がやったのは、コマンドレットをまたいで遅延実行を
してくれているのだと気が付いてやってみたという例なので。
159:デフォルトの名無しさん
18/11/01 19:18:42.62 qmW4m+8w.net
>>143
>>144
ありがとうございます。
動きました。
願わくば、タイトルバーのフォントも変えたかったのですが
おそらく無理ですよね。
160:デフォルトの名無しさん
18/11/01 21:15:55.85 PBz6MbCm.net
Ruby では、Enumerator::Lazy で、無限リストを遅延処理できる
(1..Float::INFINITY).lazy.map{ |n| n*2 }.first(5)
# => [2, 4, 6, 8, 10]
これをLazyなしだと、先に無限配列を実体化しようとして、フリーズする
(1..Float::INFINITY).map{ |n| n*2 }.first(5)
# => (実行が終わらない...)
161:デフォルトの名無しさん
18/11/01 22:34:36.78 j6Caq374.net
>>158
Rubyの場合も、PowerShellのように、複数のモジュール(PowerShellの場合だとCmdletやスクリプト)をつなげば連動して遅延実行してくれるのでしょうか。
Rubyの方が遅延実行は先駆ということは書かれていたけど。
使うことはないけれども知識として。
162:デフォルトの名無しさん
18/11/01 22:35:45.48 j6Caq374.net
その無限リストというのが、その話なのかな?
163:158
18/11/01 23:09:51.35 PBz6MbCm.net
Ruby では、内部イテレータのEnumerable と、外部イテレータのEnumerator がある
Enumeratorをメソッドチェーンしている間は、リストが実体化されないから、
Enumeratorで続けていって、最後に実体化する
内部イテレータは、イテレータ自身が繰り返し制御を行う。
一方、外部イテレータは、ユーザーが繰り返し制御を行う
外部イテレータでは、2つの配列を1つずつ進めたり、カスタマイズできる
164:デフォルトの名無しさん
18/11/01 23:16:50.68 j6Caq374.net
C#と同じような感じだね
今回はPowerShellで遅延実行すると同じく
実体化されずに次の処理に渡ることが分かったので
こんどはコマンドレットを作ってみようと思う。
165:デフォルトの名無しさん
18/11/02 19:41:44.34 mjKfpvc8.net
19,000,000件、20項目のCSVをimpo-csvで読んで、
group-objectで8x8のクロス集計したら
どうも読んでいる途中でおかしくなったようだ。
原因を探らんと・・・・。
800万件では問題なかったんだが。
166:デフォルトの名無しさん
18/11/02 22:59:49.69 KoqyjIsr.net
インポならオマエのチンポがおかしい
167:デフォルトの名無しさん
18/11/03 21:38:47.42 0juc4OvK.net
遅延実行と聞くとコマンドプロンプトのforが思い浮かぶね
しかし遅延実行じゃなくて困ったことはあるがその逆は無い
遅延実行じゃないほうって何かメリットあるの?
168:デフォルトの名無しさん
18/11/04 01:00:07.52 EZKDDV0E.net
遅延実行もsetlocalのオプションで即時展開できるやん
169:デフォルトの名無しさん
18/11/07 16:26:31.91 64s9hY5n.net
リモートデスクトップ接続元がわかる方法ないかな?
クライアントPC名、ログインユーザー名、ipを見たいんだけど…
調べたらPSTerminalServicesってモジュールで出来るらしい記事があったんだけどもうインストーラー配布してないみたいで手詰まりです。
170:デフォルトの名無しさん
18/11/07 16:30:58.01 Y6Npd9Sa.net
それPowershellと関係ないだろ
171:デフォルトの名無しさん
18/11/07 16:33:27.61 64s9hY5n.net
すいませんでした
172:デフォルトの名無しさん
18/11/07 17:01:30.70 lW8FLp9M.net
>>167
URLリンク(powershelladministrator.com)
Get-RDUserSession |fl *
で拾えるとは思うから接続元プロパティ名わかったらselect-object UserName,(接続元のプロパティ名)
とかやってみて
173:デフォルトの名無しさん
18/11/07 17:04:41.31 64s9hY5n.net
>>170
ありがとうございます!
早速使ってみたいと思います!
スレ汚しすいませんでした。
174:デフォルトの名無しさん
18/11/07 17:04:49.71 lW8FLp9M.net
>>168
PowershellとWindowsサービス管理用コマンドレットは関係有りまくり
175:デフォルトの名無しさん
18/11/07 19:32:24.46 5rQxDZaK.net
たしかに
もともと、PowerShellが出てきた目的の世界だね
176:デフォルトの名無しさん
18/11/07 21:28:10.26 0cfzNL20.net
でもここはプログラム板なので
177:デフォルトの名無しさん
18/11/07 21:30:12.65 M3d0NYL/.net
>>174
Windows板にこのスレがない時点で意味ない
178:デフォルトの名無しさん
18/11/08 06:31:15.25 zJM3NQZE.net
Windows PowerShell Part5 スレリンク(win板)
179:デフォルトの名無しさん
18/11/09 13:01:36.92 V62EYj3k.net
FizzBuzz 42文字でかけた
1..100|%{"$_`r"+{fizz}[$_%3]+{buzz}[$_%5]}
180:デフォルトの名無しさん
18/11/09 20:47:10.72 V62EYj3k.net
>>177
キャリッジリターンで上書きしてるだけなのでやや反則か
文字列長は(数字桁+1)文字されてる
181:デフォルトの名無しさん
18/11/11 03:17:15.29 v3JXSoAX.net
>>177
シンプルで美しい
182:デフォルトの名無しさん
18/11/11 07:15:18.30 tAZC+CW3.net
スクリプトブロックに[0]添字で値参照て技があるのか配列なら分かるけどなんか不思議
183:デフォルトの名無しさん
18/11/11 10:05:51.56 3JRsWB+V.net
PowerShellは配列の扱いがかなり独特
単なる数値でも配列扱いすると要素1つだけの配列みたいに振舞う
$a = 1
$a[0] ⇒ 1
$a[1] ⇒ $null
まあ>>177はよく思いついたなって思う
184:デフォルトの名無しさん
18/11/11 10:15:59.49 xoHShG4l.net
まず{fizz}が文字列になるという部分から読めなかった
185:デフォルトの名無しさん
18/11/11 12:45:53.82 xpOIALoe.net
バグみたいな仕様だな
バグだな
186:デフォルトの名無しさん
18/11/11 15:05:07.40 msMOLK59.net
powershell -v 2だと動かないな
PowerShell 3.0で配列じゃない
187:変数も要素を取得できるようになったから動く バグではないっぽい
188:デフォルトの名無しさん
18/11/11 18:49:56.37 /HpWdlpY.net
スクリプトブロックでしょ
189:デフォルトの名無しさん
18/11/11 19:06:06.81 Fk6I1vC1.net
事務の仕事で、ファイル処理とかテキスト処理のため、たまにPowerShellを使ってます
挙動の予測ができずトライアンドエラーをする機会がVBAなどより少し多くて
素人にはちょっと難しいのかなあと思ってたのですが
理解不能な技>>177を見て、使いこなせる自信がますます無くなりました
190:デフォルトの名無しさん
18/11/11 19:37:24.70 xpOIALoe.net
>>184
{abc}[0] #=>abc
これがわかんない
スクリプトブロックで囲むと、なんでabcはエラーにならないの?
普通にabcとやったらコマンドレットじゃないってエラー出るのに
191:デフォルトの名無しさん
18/11/11 19:39:58.14 JFNgNrbU.net
スクリプトブロックを文字列にキャストすると中身が実行されずに中のコードがそのまま文字列になる
つまり [string]{ fizz } が暗黙になされてるだけ
192:デフォルトの名無しさん
18/11/11 20:33:31.13 tAZC+CW3.net
その説明もピンと来ないが
&[fizz] や $hoge={Fizz};&$hoge
とすればちゃんとエラーになる。
未実行のスクリプトブロックは一種のヒア文字列扱いとなるということなんだろうか…
193:デフォルトの名無しさん
18/11/11 20:34:21.67 tAZC+CW3.net
&{fizz} だったすまん
194:デフォルトの名無しさん
18/11/11 20:43:37.28 tAZC+CW3.net
powershell -v 2のエラーメッセージ
"型 System.Management.Automation.ScriptBlock のオブジェクトにインデックスを付けることはできません。"
わかるw
195:デフォルトの名無しさん
18/11/11 21:03:13.85 xpOIALoe.net
{ abc def ghi} #=> abc def ghi
なんか{}でかこまれた部分がそのまま文字列になってる
なにこれぇ
196:デフォルトの名無しさん
18/11/11 21:26:24.30 v3JXSoAX.net
1..100|%{"$_`r"+{fizz}[$_%3]+{buzz}[$_%5]}
1..100 # 範囲演算子で1から100までのint[]を生成
| # パイプ演算子
% # Foreach-Object
{ # スクリプトブロック開始(%の引数)
" # 文字列開始(二重引用符の中ではエスケープシーケンスが展開される)
$_ # パイプラインの入力を受け取る自動変数
`r # Carriage returnのエスケープシーケンス。後に続く文字で前の文字を上書きする(なにもない場合上書き無し)
" # 文字列終了→string型
+ # 加算演算子(左辺がstring型なので右辺をstring型にキャストする)
{ # スクリプトブロック開始
fizz # コマンド/関数名fizzとして解釈されるがスクリプトブロック内なので実行されない
} # スクリプトブロック終了→ScriptBlock型
[ # []演算子で左辺を要素数1の配列としてアクセスする。
$_%3 # 配列のインデックス。%(剰余)演算子でパイプラインの入力$_を3で割る
] # 上の結果が0(→3の倍数)の場合のみスクリプトブロックの要素にアクセス、1以上の場合$null
+ # 加算演算子(左辺がstring型なので右辺をstring型にキャストする)。
{buzz}[$_%5] # fizzと同じ。結果としてstringが評価されコンソールに出力される
} #スクリプトブロック終了。
197:デフォルトの名無しさん
18/11/11 21:55:09.88 JFNgNrbU.net
>>189
単にスクリプトブロック型のオブジェクトが中身の生コードを持ってるだけやろ
{fizz}.ToString() しても同じ
ToString()でどういう値を返すかはオブジェクトの種類によって違う
&やコンマやInvokeしたときに初めてスクリプトブロック型オブジェクトが持ってるコードが評価される
198:デフォルトの名無しさん
18/11/11 22:21:33.88 JFNgNrbU.net
ちょっと舌足らずだった
スクリプトブロック型はToString()したときに
内部に文字列としてもってる生コードを返すってことが言いたかった
実際ソースを読んでるわけじゃないけど
199:デフォルトの名無しさん
18/11/11 23:20:57.99 xpOIALoe.net
スクリプトブロックは&で評価されるまで中身何もチェックされないみたいですね
一応動作は理解しましたがなんていい加減な言語なんだろ
こんなのどこにも書いてないし今後仕様変わる可能性はありそうですね
ありがとうございました
200:デフォルトの名無しさん
18/11/12 00:58:57.83 3c4TyDT9.net
こんなのは常識的に理解できる範囲や
パイプラインを考慮した関数をちゃんと作ろうと思ったら頭おかしなるで
201:デフォルトの名無しさん
18/11/12 06:17:57.42 gZOE16Sc.net
>>193
たいへんに、ありがとうごわす
202:デフォルトの名無しさん
18/11/12 20:33:57.05 kM9Cc8DJ.net
まさにシェル芸
203:デフォルトの名無しさん
18/11/12 20:51:57.60 ZJicw3nv.net
しかし、以前に比べて
投稿される内容が良くなってきたね
かつては『○○と比べてなんら』とか
そういう投稿ばかりだったもんね。
204:デフォルトの名無しさん
18/11/12 21:10:04.82 AMbuBroP.net
シェル芸ならこんなところ
seq 100|sed 's/.*5$/Buzz/;3~3s/[0-9]*/Fizz/'
205:デフォルトの名無しさん
18/11/12 23:49:46.46 ZJicw3nv.net
どちらにしても、見てもわからないね
206:デフォルトの名無しさん
18/11/13 05:49:15.96 xWZc78Mp.net
知恵を絞って短縮コードを目指すから、理解容易ではないのはまあ仕方ない
207:デフォルトの名無しさん
18/11/13 08:37:24.02 6YAdmBBQ.net
3.0からの文法でできるならだれか思いついてそうだったけど検索しても出てこないな
Anarchy GolfにはPowerShell無いし、StackExchangeで58byte、牟田口氏のコードで51byte
いろいろテクニックが載ってて面白い
what is your fave PoSh version of FizzBuzz? : PowerShell
URLリンク(www.reddit.com)
code golf - Tips for golfing in PowerShell - Programming Puzzles & Code Golf Stack Exchange
URLリンク(codegolf.stackexchange.com)
208:デフォルトの名無しさん
18/11/13 18:05:14.16 hYk6FFU0.net
IDがバーベキューだね
209:デフォルトの名無しさん
18/11/14 08:50:21.40 PFpyL5+w.net
PowerShell Core 6.1.0で日本語が正しく表示されない現象について
URLリンク(blog.shibata.tech)
210:デフォルトの名無しさん
18/11/14 09:25:00.49 JBsUV7Ak.net
>>206
teratailの質問がトリガーでした
URLリンク(teratail.com)
211:デフォルトの名無しさん
18/11/14 14:34:06.24 REddJKuq.net
PowerShell で全角文字を入力すると表示がおかしくなる問題について
URLリンク(blogs.technet.microsoft.com)で全角文字を入力すると表示がおかしくなる問/
212:デフォルトの名無しさん
18/11/14 20:33:58.55 JBsUV7Ak.net
ISEは問題ないのに、普通のシェルがダメって何年放置されてるのだろう?
213:デフォルトの名無しさん
18/11/14 21:42:06.99 wbqNTVov.net
VSCodeでPowershellの色寂しくなった
214:デフォルトの名無しさん
18/11/15 00:08:24.89 WLDbhFjW.net
>>209
2か月じゃないか?
215:デフォルトの名無しさん
18/11/15 00:38:25.77 RLOkjNth.net
何年も放置されてるぞ
216:デフォルトの名無しさん
18/11/15 00:41:50.91 WLDbhFjW.net
>>212
6.0はOKで6.1がだめと書かれてる
6.1が出たのは2か月前じゃないの
217:デフォルトの名無しさん
18/11/15 04:26:11.58 eQKfIPvp.net
>>208はデスクトップ版Powershellの話Win10が出て3年かな
218:デフォルトの名無しさん
18/11/15 10:35:40.03 3jZ436MI.net
オプションを展開させるうまい方法ってありますか?
たとえば、-WhatIfを付ける/付けないを場合分けしたいときなど。
HogeCmd fuga piyo $whatif
とやると、$whatifは普通の引数になってしまうのでNG。
eval方式(コマンド全体を文字列にしてInvoke-Expressionで呼び出す)もあるけれど、
できれば、オプションのところだけうまいこと展開できればいいな、と。
219:デフォルトの名無しさん
18/11/15 13:52:20.43 94uNwBee.net
スプラッティングでやるのが普通かな
220:デフォルトの名無しさん
18/11/15 15:12:55.02 8dkxddcr.net
>>216
それ何?
221:デフォルトの名無しさん
18/11/15 15:25:38.96 VchA8nRa.net
>>216
横からだが、スプラッティングというものを初めて知って非常に参考になった。ありがとう。
222:デフォルトの名無しさん
18/11/15 16:00:23.13 4BqFdJaY.net
>>216
勉強になりました
ありがとう
223:デフォルトの名無しさん
18/11/15 17:07:06.05 n3jFLh1o.net
>>216
サンクス
224:デフォルトの名無しさん
18/11/15 21:27:16.74 cJYjGYCA.net
スプラッタのスプラッタ
225:デフォルトの名無しさん
18/11/15 22:18:43.81 sPg3U71k.net
>>221
よせよ
バケラッタを連呼する某アニメキャラを連想しちゃっただろ
226:デフォルトの名無しさん
18/11/16 05:17:03.39 7vBGbpbo.net
スプラピスプラッタ
227:デフォルトの名無しさん
18/11/16 10:51:17.32 0JdshTdX.net
Announcing General Availability of the Windows Compatibility Module 1.0.0
URLリンク(blogs.msdn.microsoft.com)
228:デフォルトの名無しさん
18/11/16 17:17:39.49 h/lypBab.net
実行ユーザーがSYSTEMな場合の
COMオブジェクト利用がうまくいかないのは回避策ないでしょうか
229:デフォルトの名無しさん
18/11/16 22:04:34.76 bUstU+hr.net
v6.1.1 Release of PowerShell Core
URLリンク(github.com)
230:デフォルトの名無しさん
18/11/16 22:06:57.09 bUstU+hr.net
v6.0.5 Release of PowerShell Core
URLリンク(github.com)
231:デフォルトの名無しさん
18/11/16 22:55:21.07 6qpmN5uX.net
資格情報・認証とか?
「powershell 資格情報」で検索して
232:デフォルトの名無しさん
18/11/17 06:13:16.64 bZFmP2aX.net
>>225
excelとか使うとき普通に使えてるけど
何かうまくいことがあるの?
233:デフォルトの名無しさん
18/11/17 07:39:47.70 tSr/NeZx.net
>>229
普通の使い方してたらSYSTEMなんかで動かすことはないからサービスとかで動かしたいとかなんだろうと思う
いずれにせよ状況小出しにする奴の相手してもしょうがない
234:デフォルトの名無しさん
18/11/17 07:47:24.60 gKTWKNrR.net
タスクスケジューラで動かしたいのかも。いずれにせよ具体例を書いて欲しいものだ
235:デフォルトの名無しさん
18/11/18 00:15:47.54 L8Gt0pA8.net
>>221
スプラッターハウス以外思い浮かばないw
236:デフォルトの名無しさん
18/11/19 16:50:05.08 g2+fQFFI.net
WindowsCompatibilityモジュール試してみたけどFormat-table用の情報とか無いから一部コマンドレットの表示が微妙
いちいちモジュール読み込まんとダメだし
237:デフォルトの名無しさん
18/11/19 17:10:55.17 9fApbElg.net
>>233
Fomat-Table、モジュールなしだと使えなかったの?
238:デフォルトの名無しさん
18/11/19 19:27:11.18 xl/gDTc+.net
>>234
いや、そこまでの問題じゃない
Format-Tableで優先表示するプロパティ情報がないだけ
Format-Tableしても要らんプロパティがでてきたりする
Select-objectとかしてあげれば問題ないよ
239:デフォルトの名無しさん
18/11/19 19:59:58.22 Qq88xGOU.net
暗黙のWrite-Host|ft
が効かず、明示的に書かんどダメな感じ?
240:デフォルトの名無しさん
18/11/19 21:26:04.01 Gl33OQrV.net
投稿がまともになってきた
241:デフォルトの名無しさん
18/11/23 16:20:10.48 5fd0Mgpu.net
Effective PowerShell的な本ってないの?
普段、使う分には問題なく使えてると思う
でもより上手い書き方があるのでは、良いコーディング習慣を守れてるだろうか、と自問自答すると自信を持てない
242:人に見せるものでもなく、人のを見る機会もないからどうしても自己流になってしまう
243:デフォルトの名無しさん
18/11/23 22:10:45.37 ZSsoDLJq.net
本じゃないけど
PowerShell のコーディングスタイル
URLリンク(tech.guitarrapc.com)
244:デフォルトの名無しさん
18/11/23 22:36:58.28 b8tU0Ani.net
文法詳説はこの前出た貝殻本が扱ってたけど
読みにくい(演算子の説明が130ページくらいから始まる)
245:デフォルトの名無しさん
18/11/24 01:01:38.61 sK2Z8lS/.net
バイナリモジュールの情報少ないよなあ
github漁ってもあんまりないし
コマンドレット内でGet-Item呼び出す方法探すだけでだいぶ苦労した
結局ダサいやり方になったけど
246:デフォルトの名無しさん
18/11/24 02:06:29.51 mWKK19aP.net
powershell深いなあ。深すぎてちょっと目眩する時がある
247:デフォルトの名無しさん
18/11/24 03:37:58.44 BKTpjWqm.net
get-netadapterとか見たいに複数の結果を返すようなクラスが作りたいんだけど
どんな感じで書けばいいん?
思い浮かばねえorz
248:デフォルトの名無しさん
18/11/24 03:58:00.19 wk1txPAQ.net
>>243
Function内でWrite-outputでクラスを複数回出力するとか
クラスの配列を返せばいいよ
249:デフォルトの名無しさん
18/11/24 04:04:11.42 BKTpjWqm.net
>>244
ちと理解できてない
例えば、get-netadapterの内容を編集して結果をだすクラスを作るとして
インプットが複数なのでそれを都度かえしていくってことでいいのかな?
250:デフォルトの名無しさん
18/11/24 05:43:08.48 wk1txPAQ.net
>>245
まず作りたいのはクラスじゃなくてFunction(関数)かメソッドかコマンドレット(外部関数)だよね?
クラスは型であって入力と出力を持つものでは無いし
Get-netadapterも含めて一般的なコマンドレットの出力型は配列で
配列の各要素がクラスになってる
Get-netadapterの結果に編集を加える場合、
入力された値をforeach等で分解して
クラスにAdd-member等で要素(プロパティとか)を加えて毎回出力するとかする
もしくは配列の各要素がPSCustomObjectクラスの変数を作って
それを出力するとかする
サンプルに丁度よい関数とかあればいいけど一端探すのめんどいから割愛
Add-memberとかクラスのメンバーについてはググって調べて下さいな
251:デフォルトの名無しさん
18/11/24 09:11:34.28 kuH8s62I.net
この手の話題でクラスとインスタンスの区別をせずに語られるとすごくモヤモヤする
252:デフォルトの名無しさん
18/11/24 12:12:31.33 +C2yOPuj.net
PSVersion 5.1.17763.134
PSEdition Desktop
で Windows.Forms.Timer がちゃんと動いてくれぬ
Tickイベント内の変数の変更を保持してくれない?
253:デフォルトの名無しさん
18/11/24 12:54:26.03 BKTpjWqm.net
>>246
ごめん、違う
254:デフォルトの名無しさん
18/11/24 13:22:16.60 BKTpjWqm.net
途中で切れてしまった
コンストラクタに引数設定できるでしょ
その引数にget-netadapterの結果みたいなのを使う
で、その値で各プロパティの初期値みたいなのをセット
各引数付きのメソッドを実行すると、引数とプロパティを処理した結果を返すんだけども
get-netadapterみたいに複数がコンストラクタのインプットになるから、どうしたもんかと
やっぱ、無理なのかな
255:デフォルトの名無しさん
18/11/24 13:44:41.51 QuuVAkmI.net
UTF-8を標準出力に出力するexeの結果を処理したいのですが
特定の文字が入っていると文字コード変換に失敗します
例えば以下の文字列はこのように文字化けします
「ホスト#01」⇒「ホスチE01」
「ホスト02」⇒「ホスチE2」
正しくPowerShellで扱える文字列に直す方法をアドバイスいただけないでしょうか
## ソース
$src = [System.Text.Encoding]::UTF8
$d
256:st = [System.Text.Encoding]::Default $test = & 'C:\test\UTF8.exe' $bytes = $dst.GetBytes($test) $result = $dst.GetString([System.Text.Encoding]::Convert($src,$dst,$bytes)) UTF-8を標準出力に出力するサンプルexe(C#) Console.OutputEncoding = new UTF8Encoding(); Console.WriteLine("ホスト#01\r\nホスト02");
257:デフォルトの名無しさん
18/11/24 14:43:41.10 2Kjdv9to.net
>UTF-8を標準出力
でぐぐったら
>これで、UTF-8 を使うアプリとの連携もばっちりだ。
そうだ
258:デフォルトの名無しさん
18/11/24 14:43:42.28 +C2yOPuj.net
>>251
PowerShellの内部でのエンコードはたしかUTF16じゃないかな
259:デフォルトの名無しさん
18/11/24 16:43:37.74 QuuVAkmI.net
>>252
このスレに書き込んで説明するために標準出力って持ってきたのですが
ググってるときは標準出力って思いつかずサイトに巡りあえませんでした
おかげでなんとかなりそうです
ありがとう
>>253
UTF16だという情報もみて変えてみたりもしたのですが、
余計文字化けがひどくなったのでどう対応すべきか悩んでました
260:デフォルトの名無しさん
18/11/25 01:27:52.64 bdma9Nzw.net
文字コードなど、考えたこともない。
UTF-8 しか使わないし
どのOS・アプリでも内部的には、UTF-16 だろうけど、これを扱うことなどない
261:デフォルトの名無しさん
18/11/25 01:44:12.14 fZE2Z+wN.net
URLリンク(altohumano.com)
262:デフォルトの名無しさん
18/11/25 10:54:09.80 Vpi5v0vn.net
PowerShellの変数ってちゃんと型指定したほうがいいの?
263:デフォルトの名無しさん
18/11/25 19:55:30.63 aKGD81aI.net
パフォーマンス気にして型変換するなら、Powershell使うこと自体が不適
通常は勝手に型変換しないように型付ける
v3のビットシフト演算子が勝手にbyte型をint型にキャストするのマジ糞
264:デフォルトの名無しさん
18/11/25 19:55:52.89 aKGD81aI.net
>>258
パフォーマンス気にして型「指定」だわ
265:デフォルトの名無しさん
18/11/25 20:30:16.12 dc9uTwTH.net
powershellにintegral promotionは定義されてないのか
266:デフォルトの名無しさん
18/11/25 21:22:56.96 XYd2EWob.net
未だにバッチをメインで使っている
ぼちぼちPowerShellメインに変えようかと思っているんだが
WSHもどうか?とおもったり
もうWSHは終わりで、PowerShellが延びると思っていて良い?
267:デフォルトの名無しさん
18/11/25 23:19:09.06 NeSEBBpr.net
VBScriptはちょっとオワコン感出てきたけど、WSH自体はJavaScriptがデフォルトで使えるのでしぶとく残りそう
268:デフォルトの名無しさん
18/11/25 23:34:35.24 tkP11man.net
>>261
標準で備わってる機能面でwshはPowershellに比べて貧弱だよ
Powershellだとcsv読み込むとかjson処理するとかコマンドレットで用意されてるけどwshだとそれなりのコード書かないと出来ないし
ループ周りもパイプラインに比べると冗長になりがち
ただwshの方がシンプルで学習は楽、Powershellは複雑な部分が多い
学習コストはPythonより高い気がする
269:デフォルトの名無しさん
18/11/25 23:48:06.15 tkP11man.net
PowershellはMS系クラウドサービスの管理シェルとして伸びるかな
バッチもwshも消えなそうだけど今後の伸びは無さそう
270:デフォルトの名無しさん
18/11/26 02:18:11.89 beMkVqx1.net
手を広げ過ぎて仕様が複雑というより単に雑な印象がある
271:デフォルトの名無しさん
18/11/26 02:57:13.19 gMbJcsFf.net
学習コスト高いというか体系的にまとまった書籍等無いからよくわからずに動く状態になる(配列とか)
Pythonのようにすんなり上達するのではなくて、ある程度学ぶとかえってわからなくなるの繰り返し
それでも今更wshやるよりはいいはず
272:デフォルトの名無しさん
18/11/26 03:29:58.94 x+j35ljp.net
PowerShellだと学習コストは高いけど
よく使うコマンドレットがそろってる
WSHだとJavaScriptで書けるけど
自作ライブラリみたいの書く手間はある
微妙な勝負だけど今から始めるならもう
Poshを使ってしまった方が良いと思う
273:デフォルトの名無しさん
18/11/26 08:10:27.64 8ZmTpMnp.net
>>262
いやちょっとどころじゃねーだろ
いつの時代の話してるんだか
274:デフォルトの名無しさん
18/11/27 02:30:28.91 tmYINXAW.net
未だにバッチでこと足りてしまう管理業務というのが想像できない。
275:デフォルトの名無しさん
18/11/27 07:41:39.02 WLNYjP7B.net
VBSはバリバリ現役よ
うちの社内システム開発・運用は全てVBS
無料であり
バッチファイルより遥かに強力で
仕様が枯れていてVerUPに振り回されることがなく
Javaのように一企業の思惑でライセンス問題が発生することもない神言語
PowerShellはerUPが止まり仕様が枯れるまでは採用しない
276:デフォルトの名無しさん
18/11/27 07:53:06.65 wHi5iJt/.net
>>270
WIN10のストアアプリの削除もVBSで出来るの?
277:デフォルトの名無しさん
18/11/27 08:04:37.56 WLNYjP7B.net
>>271
うちはWin7
278:デフォルトの名無しさん
18/11/27 09:20:49.19 pR/1ZC3V.net
Win7はあと1年ちょいでサポート終了だしな
その後はWin10のPowershell5.1で標準化するでしょ
今のPowershellは2.0が残ってるのがガンになってる気がする
279:デフォルトの名無しさん
18/11/27 09:48:14.11 PCREN6ZT.net
>>270
Windows PowerShellはとっくにバージョンアップ止まってるんだが何が不満なんだ
280:デフォルトの名無しさん
18/11/27 13:25:38.77 n8g+btBw.net
>>270
5.1がWinにおける最終バージョンだろ
281:デフォルトの名無しさん
18/11/27 17:49:55.92 GQ1LL4CF.net
5.1だと正常に動かなくて
v2オプジョンだとちゃんと動くのとかあるし…
282:デフォルトの名無しさん
18/11/27 18:27:04.57 7LglyRgp.net
>>276
どんなのがあったっけ?
283:デフォルトの名無しさん
18/11/27 19:10:08.25 d01YhI4a.net
今だとUIフォームつくるならWPF?
284:デフォルトの名無しさん
18/11/27 23:03:49.22 5h6j1xJ1.net
JP1のSPTファイルもぶっちゃけVBSみたいなもんだよね
285:
18/11/27 23:18:31.25 X/MEoliS.net
>>273
win7 はたぶん終了にならないと思います、win10 がクソすぎるからね
286:デフォルトの名無しさん
18/11/28 09:58:30.52 dGZ6nyrF.net
>>280
神OS(笑)XPの時も似たような話聞いたわ
287:デフォルトの名無しさん
18/11/28 11:20:24.48 b089yY0z.net
Win7はデフォでv2.0しか使えないからこのスレ的にはダメダメ
288:デフォルトの名無しさん
18/11/28 12:31:06.61 j69eTZ+j.net
>>282
デフォルトじゃないとだめなの?
289:デフォルトの名無しさん
18/11/28 12:57:23.83 036JocE6.net
有償で延長サポートの話が出てる以上
それ以外はバッサリ終了に決まってるでしょ
290:デフォルトの名無しさん
18/11/28 19:59:03.72 b089yY0z.net
>>283
出先でWMF入れられないじゃん
291:デフォルトの名無しさん
18/11/28 21:40:54.00 e3ALQLMX.net
>>285
なるほどね。仕事内容や立場により、いろいろあるわけね。
292:デフォルトの名無しさん
18/11/28 21:55:44.64 JxqTGA2g.net
これが5.1だとちゃんと動かねぇ
Add-Type -As
293:semblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing function ShowInfoMain{ $counter = 0 $timerTestTick = { $label_timer.Text = "{0} 秒" -f $counter++ } #タイマーの初期化 $timerTest = New-Object Windows.Forms.Timer $timerTest.Add_Tick($timerTestTick) $timerTest.Interval = 1000 $timerTest.Enabled = $TRUE $timerTest.Start() #フォーム $Form = New-Object System.Windows.Forms.Form $Form.Size = "100,100" $Form.StartPosition = "CenterScreen" #タイマー $label_timer = New-Object System.Windows.Forms.Label $label_timer.Text = '0 秒' $Form.Controls.Add($label_timer) $result = $Form.Showdialog() $timerTest.Dispose() $Form.Dispose() } . ShowInfoMain
294:デフォルトの名無しさん
18/11/28 23:01:00.54 b5TbM/Zv.net
$counter = 0
$label_timer = New-Object System.Windows.Forms.Label
$timerTestTick = {
$label_timer.Text = "{0} 秒" -f $script:counter++
}
295:デフォルトの名無しさん
18/11/28 23:05:36.16 b5TbM/Zv.net
順序関係なく単純に $script:counter++にするだけでいいみたいやね
296:デフォルトの名無しさん
18/11/28 23:27:13.98 JxqTGA2g.net
んがー
スクリプトブロックでのスコープによるものって
認識でよろしいのだろうか…
2.0だと動くのはなんでなのじゃ
297:デフォルトの名無しさん
18/11/28 23:38:49.55 JxqTGA2g.net
>>289
ありがとうございました
初期値の宣言でもやんないとダメみたい
$script:counter = 10
298:デフォルトの名無しさん
18/12/02 21:23:25.18 u3CI+74z.net
PowerShell 3.0での破壊的変更まとめ
URLリンク(blog.shibata.tech)
デリゲート代わりに使われるスクリプトブロックのスコープ
PowerShell 3.0からデリゲート代わりに使われるスクリプトブロックが独自のスコープを持つようになっています。
たとえば以下の様な例だとPowerShell 2.0では1を、PowerShell 3.0からは0を返す様になります。
Add-Type @"
public class Invoker
{
public static void Invoke(System.Action<int> func)
{
func(1);
}
}
"@
$a = 0
[Invoker]::Invoke({$a = 1})
$a
299:デフォルトの名無しさん
18/12/03 14:13:32.11 xHLM582p.net
新しいpowershell では、Get-Clipboard で、クリップボードから文字列も取得できる!
300:デフォルトの名無しさん
18/12/03 20:49:19.87 9uCJpuZ+.net
んなもん.NET直接呼んだ方が互換性高い
301:デフォルトの名無しさん
18/12/03 21:32:04.89 uxAfgW4c.net
なんでそんなめんどくせーことせなあかんねん
302:デフォルトの名無しさん
18/12/03 22:42:10.02 YBAcFOR9.net
>>295
powershellは.netのフロントエンドだから
303:デフォルトの名無しさん
18/12/03 22:51:11.92 uxAfgW4c.net
そういう問題じゃないが・・・
支障がない場合はそんまま使うわあほくさ
304:デフォルトの名無しさん
18/12/04 02:28:30.75 Tn5NKjZ7.net
なんで今更5.0の話してんのさ
305:デフォルトの名無しさん
18/12/04 16:12:13.82 eKuwOju4.net
5ch の文章を、テキストエディタへコピペすると、
各行の先頭・末尾に、空白が付くので、これを除去したい
そこで、Ruby でプログラムを作って、
バッチファイルで、そのプログラムをダブルクリックで起動できるようにした
Windows で、クリップボード内の複数行文字列の、各行の先頭・末尾から、
連続する空白類を除去して、クリップボードに入れる
新しいpowershell では、クリップボードから文字列も取得できる
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 |
clip.print( ary.join "\n" )
end
306:デフォルトの名無しさん
18/12/04 17:07:32.91 hkRngAzE.net
Get-Clipboardの機能は2015年からあるがどう新しいのか
307:デフォルトの名無しさん
18/12/04 17:45:54.20 xb7Yz2vd.net
Ruby挟む意味ないじゃん?バッチも画面が目ざわりだ�
308:オvbsがいいよ CreateObject("WScript.Shell").Run "powershell ""gcb | % trim | scb""", 0
309:299
18/12/04 19:47:12.62 eKuwOju4.net
VBS でも、ダブルクリックで実行できる?
310:299
18/12/04 19:58:07.57 eKuwOju4.net
ありがとう。
VBS でも、ダブルクリックで実行できた
ただ、黒い画面が表示された方が、わかりやすくない?
何秒ぐらい待つのか、迷う
311:デフォルトの名無しさん
18/12/04 21:38:59.01 gx9huxXd.net
Windows文化は「黒い画面」が出るのを良しとしないのだよ
312:デフォルトの名無しさん
18/12/04 22:20:16.69 SeIDr86X.net
>>304
そんなの一部の神経質な奴らだけ
313:デフォルトの名無しさん
18/12/04 23:31:35.16 RbfFY42H.net
>>305
Windows 文化と言うより、業務でオツちゃん・オバちゃんに使わせるシステムの場合、
あいだに黒い画面が一瞬出ると「なにこれ?」って無用な問い合わせが入ったり、
場合によっては無理やり閉じられることもある。
fool proof の観点からは黒い画面が無いに越したことはない。
314:デフォルトの名無しさん
18/12/05 20:37:03.12 x9ea9mMQ.net
" が含まれている文字列を環境変数にいれてnet useコマンドを使うと" がエスケープされず想定通りに処理されないのですがどうエスケープすればいいんでしょうか
シングルコーテート、バックコーテート、ダブルコーテートで"をくくってもだめでした
315:デフォルトの名無しさん
18/12/05 20:49:13.75 jRzepDw/.net
何をしたくて何をしているのかさっぱりわからん
316:デフォルトの名無しさん
18/12/05 20:58:21.39 x9ea9mMQ.net
たとえばですが
$pass = test123"45
net use c:¥temp ¥¥192.168.1.10 $pass /user:testuser
とした時にパスワードに含まれている"が文字列として認識されずコマンドが実行されないのです
これをエスケープしようと
$pass = test123"""45
$pass = test123'"45
などとしてもうまくいかない感じです
317:デフォルトの名無しさん
18/12/05 20:59:28.32 0urcwekh.net
net useはpowershellのコマンドプロンプト用、powershellではNew-Psdriveコマンドレット、powershellのエスケープ文字は基本バックスラッシュ`
318:デフォルトの名無しさん
18/12/05 21:00:28.08 0urcwekh.net
WSHとごっちゃにしないでね
319:デフォルトの名無しさん
18/12/05 21:01:52.08 0urcwekh.net
1行目間違えた
net useはコマンドプロンプト用
320:デフォルトの名無しさん
18/12/05 21:03:52.33 x9ea9mMQ.net
net use ではなく new-psdriveだとバクスラでエスケープ可能なんですか?
net useだとエスケープできなかったので、ちょっとやってみまふ
321:デフォルトの名無しさん
18/12/05 21:08:28.49 x9ea9mMQ.net
ちなみにパワーシェルからcmd /cでコマンド呼び出すときのエスケープキーはバクスラと^のどちらですか?
322:デフォルトの名無しさん
18/12/05 21:10:17.22 0urcwekh.net
本件は
$pass='123"45'
とすればいいだけ
323:デフォルトの名無しさん
18/12/05 21:16:36.03 x9ea9mMQ.net
シングルコーテートでくくってもエスケープできるんですね
ありがとうございます
324:デフォルトの名無しさん
18/12/05 21:23:21.81 0urcwekh.net
エスケープじゃなくて、Powershellでは文字列は必ず'か"どっちかで囲う。生身はだめ。'で囲うのは静的リテラルの場合
325:デフォルトの名無しさん
18/12/05 21:25:50.83 jRzepDw/.net
結局環境変数は関係ないのか?
> " が含まれている文字列を環境変数にいれて
326:デフォルトの名無しさん
18/12/05 21:30:22.57 0urcwekh.net
本当の初学者で変数もコマンドプロンプトと同じ概念なんだろ
327:デフォルトの名無しさん
18/12/05 21:57:08.28 x9ea9mMQ.net
なるほどそういうルールあるんですね
プログラムやったことないんでしらんかったす
リテラルってのも意味わからんかったくらいや
328:デフォルトの名無しさん
18/12/05 22:13:06.29 ix5zH8Lr.net
start-processで終了を待たずにps1実行していくのは疑似並列処理として考えて良いのでしょうか
329:デフォルトの名無しさん
18/12/06 07:24:42.90 Ia5EZXvv.net
「`」はバッククォートだ馬鹿者
バックスラッシュ(\)とは違う
330:デフォルトの名無しさん
18/12/06 08:11:29.70 XlsCLRxJ.net
PowerShell Coreの宣伝始まった
331:https://twitter.com/Steve_MSFT/status/1070096140010287104 (deleted an unsolicited ad)
332:デフォルトの名無しさん
18/12/06 12:49:27.99 r+yxrRWT.net
標準出力に変なもん混ぜるな
333:デフォルトの名無しさん
18/12/06 14:36:39.70 8XTishpu.net
>>309
間違いないよう(見間違いも)にだったらヒアストリングつかったらどうでしょう
行は増えますが、エスケープ考える必要もかいから。
@"
test123"45
"@
334:デフォルトの名無しさん
18/12/07 00:30:59.21 d/eT01GS.net
whoamlで取得した実行結果のユーザ名を一行で環境変数に入れるにはどうすれば良いでしょうか
whoami 実行
結果 testpc¥user1
と結果が返ってくる場合、
$test = whoami.split("¥")[1]
と言ったかたちで
$testにuser1を格納させたいのですがうまく行きません
335:デフォルトの名無しさん
18/12/07 01:04:59.92 frCtIBO+.net
括弧で囲む
(whoami)
336:デフォルトの名無しさん
18/12/07 03:14:11.72 0M/LMioQ.net
>>326
昨日と同じ人だと思うけれどpowershellでは変数はコマンドプロンプトとは違い環境変数ではありません。
URLリンク(www.atmarkit.co.jp)
337:デフォルトの名無しさん
18/12/07 07:51:42.00 QVqNOX9I.net
読んでみたけど違いがよくわからん
型を持つってとこ?
338:デフォルトの名無しさん
18/12/07 08:45:51.25 hrhTiXxm.net
型じゃなく範囲・スコープだよ
環境変数はOSが管理していて、ひとつ値をセットしたら同じ環境内の他プロセス(アプリ)がその値をOSに教えてもらえる
普通の変数はプロセス内で管理されていて、他プロセスは見ることが出来ない
339:デフォルトの名無しさん
18/12/07 12:18:05.50 cSzYN2du.net
Linux では、~/.bashrc に環境変数を書けば、
自分(そのユーザーだけ)が起動するプロセスから、アクセスできる
etc/ 以下なら、PC 全体の設定になる
~/.bashrc は、Windows ではユーザー環境変数。
一方、システム環境変数は、PC 全体の設定で、すべてのユーザーで共有される
例えば、Tで始まる環境変数なら、
ls env: | Where-Object {$_.name -like "T*"}
340:デフォルトの名無しさん
18/12/07 12:42:27.81 TQVSWTyy.net
>>326
それを実行している自分自身のユーザ名が欲しいだけなら、わざわざそんなことしなくても
$env:USERNAME
で引っ張ってこれる。
出し惜しみ、小出しにしないで前後関係も話さないと的確なアドバイスが出来ないよ。
341:デフォルトの名無しさん
18/12/07 16:32:33.86 fTv51LPz.net
>>331
.bashrcはPowershellでは$Profileに当たると思うわ
342:デフォルトの名無しさん
18/12/07 17:14:53.01 2MiN5Gqm.net
つーか、Credential使えよ
今時ハードコートとかありえん
343:デフォルトの名無しさん
18/12/07 17:53:23.13 TQVSWTyy.net
>>334
だね。
どうやら ID:x9ea9mMQ ID:d/eT01GS はネットワークドライブのマウントがやりたいようだけど、
dos batch で使うべき net use や whois を PowerShell で使おうとすることに
無理がある。出来なくもないけどエレガントじゃない。
PowerShell でやるなら New-PSDrive だな。
URLリンク(docs.microsoft.com)
-Credential で任意の(自分以外の)クレデンシャルも指定できるから、
ID:x9ea9mMQ の要件も(たぶん)満たせるだろう。
344:デフォルトの名無しさん
18/12/07 18:35:56.11 fTv51LPz.net
コマンドレット使える所を外部コマンド使うなよとは思うね
出力から値をテキスト抽出で取り出すとかもエ�
345:激Kントではないな あとlsとかcatとかdirとかのコマンドエイリアス使うのも微妙に感じる
346:デフォルトの名無しさん
18/12/07 19:53:53.63 iBsL10N5.net
Get-ChileItemに-Depthなんてオプションあったんだな。
うちの会社は↓みたいな整然としたフォルダ構成だから
こういうオプションあるとすごく助かるわ
プロジェクト管理
└2018年
└1Q
└プロジェクトA
└プロジェクトB
└2Q
└プロジェクトC
└3Q
└プロジェクトD
└4Q
└プロジェクトE
└プロジェクトF
└2019年
└1Q
└プロジェクトG
347:デフォルトの名無しさん
18/12/07 20:47:47.55 d/eT01GS.net
treeコマンドやん
348:デフォルトの名無しさん
18/12/07 20:51:06.57 0M/LMioQ.net
tree形式で図示しただけ。
gciの-Depth は再帰検索する深さの指定
349:デフォルトの名無しさん
18/12/07 20:55:01.67 0M/LMioQ.net
ID:iBsL10N5 自身が言うべき事だが
阿呆指摘についカッとなった
350:デフォルトの名無しさん
18/12/07 21:00:51.64 hrhTiXxm.net
清濁併せ呑んでこそのPowershell
なんたって名前からしてパワーだからな
力業もどんとこい
351:デフォルトの名無しさん
18/12/08 11:14:58.74 j0zdr08g.net
.NET Core 3.0 Preview 1でWPF、Windows Forms, WinUIが組み込まれてオープンソース化したんか
ほえー
352:デフォルトの名無しさん
18/12/08 15:04:34.50 8f5a0RKW.net
>>342
Preview出てたんだ
早速使ってみたい
353:デフォルトの名無しさん
18/12/08 21:38:13.36 3Pj/jJ/S.net
Announcing Open Source of WPF, Windows Forms, and WinUI at Microsoft Connect(); 2018
URLリンク(blogs.windows.com)
354:デフォルトの名無しさん
18/12/10 20:42:25.20 T1JETwww.net
PowerShellでLINQって使えますかね?
355:デフォルトの名無しさん
18/12/10 21:47:33.54 PtRqcV9k.net
Linqっぽいことはできる
(1..10).ForEach({ $_ + 100 }).Where({ $_ -gt 105 })
Linqメソッドも呼べるけどC#のようにインスタンスメソッドな感じでは使えない
[Linq.Enumerable]::Where(1..10 -as [int[]], { param($x) $x -gt 5 } -as [Func[int,bool]])
356:デフォルトの名無しさん
18/12/10 22:38:26.51 vOOk2a2h.net
必要な箇所でC#コード書けばいいじゃん
外人のコード読むと皆そうやってるよ
357:デフォルトの名無しさん
18/12/11 18:45:17.51 zooyFZ6f.net
@echo offと同等のコマンドってパワーシェルにありますか?
358:デフォルトの名無しさん
18/12/11 19:50:47.03 5HU4XML/.net
>>348
エコー防止したいなら
$null = 式
式 | Out-Null
式 > $null
[void]式
どれでもどうぞ
359:デフォルトの名無しさん
18/12/11 20:18:20.80 pSYvkLmz.net
powershellでメール受信やるならMailkitがいいですかね?
360:デフォルトの名無しさん
18/12/14 21:21:08.51 xmsOh7Vk.net
UWPスレが死んでるのでこっちで聞き直すね
起動してるUWPアプリの列挙ってpowershellでどうやればいいですかね?
全く出てこないんですが
361:デフォルトの名無しさん
18/12/14 23:01:55.52 unWqZBXJ.net
Get-WmiObject Win32_Process | where Path -like "*\WindowsApps\*" | fl Process Id,Name,Path
とか
362:デフォルトの名無しさん
18/12/16 12:08:41.16 PkDIN57F.net
>>345
具体的にどんなことをやりたいか書いていただくと
PowerShellでLINQ利用した場合の例を挙げられると思うけど
363:デフォルトの名無しさん
18/12/16 21:18:15.54 XltMT+7i.net
職場のPC(セキュリティ上の理由でネットに繋がらない)がWin7→Win10になったんだが
PowerShellのヘルプがオンラインヘルプだけになって見れないのでつ
364:らい
365:デフォルトの名無しさん
18/12/16 21:48:37.43 GDEIwjsa.net
Get-HelpとかISEのコマンドアドオンじゃダメなん
366:354
18/12/20 22:28:30.63 MSiR3oAq.net
>>355
遅くなった & 説明が間違えてたごめん
Get-Helpコマンド自体は使えるんだけど-Fullオプション付けても付けない時と同じ内容しか出てこない
つまり使用例が見れないのでPowerShellを最近使い始めた自分にはつらい
ISEもヘルプを見ようとすると「ネットに繋がりません」みたいなエラーになった
もうリファレンス本買うことにするよ・・・orz
367:デフォルトの名無しさん
18/12/20 22:59:49.46 PfMwju1x.net
別PCでSave-Helpでファイルダウンロードして手動で配置したらあかんの?
368:356
18/12/21 01:31:43.78 GySz2aRs.net
>>357
セキュリティガチガチの保険会社の現場なんで無理っす><
ってか↓これポチりましたw
URLリンク(www.amazon.co.jp)
369:デフォルトの名無しさん
18/12/21 08:22:37.58 Lg32FCuG.net
5.1対応の良い感じの書籍あるんかな
370:デフォルトの名無しさん
18/12/22 07:51:50.03 i7ExTGRa.net
変数展開するときに、
$test
と
${test}
ではなにが違うんですか?
371:デフォルトの名無しさん
18/12/22 12:12:36.07 UGqq2IDw.net
>>360
基本一緒でしょう
GetType()
してみるとわかりますと同じですね。
ただし、${}の指定では配列のインデックス指定できない
${a[0]} とかは許されないですね。
なんでこういうのがあるかは分りません。
372:デフォルトの名無しさん
18/12/22 14:03:56.67 YB2ocxbA.net
$test = "TEST"
"test$testtest"
"test${test}test"
こういう時にでも使うんじゃねーの
求める形に適当なのを使えばいいんじゃねーかな
373:デフォルトの名無しさん
18/12/22 15:32:06.19 TlQhzlLR.net
中括弧つければ通常使えない文字も使える
${\(^o^)/} = "オワタ"
${ Hello ?? World! `nby powershell } = "hi"
どんな文字列でも変数名として有効であることが保証されるからコード生成とかで使われるらしい
普通は文字列への埋め込み時くらいしか使わんね
374:デフォルトの名無しさん
18/12/22 16:16:19.79 VDYmdehC.net
>>360
私はコードの可読性を高めるためになるべく ${hoge} といった形で記述するようにしてます。
あと、文字列をつなぐような場合でも ${hoge} が使われます。
$hoge = "hoge"
echo "${hoge}fuga"
この場合は「hogefuga」が出力されますが、
$hoge = "hoge"
echo "$hogefuga"
これでは$hogefuga という変数を参照することになるので思ったように動作しません。
375:デフォルトの名無しさん
18/12/22 16:37:26.19 UGqq2IDw.net
なるほどね
$test="TEST"
"test"+$test+"test"
より次の方がスマートかもね
"test${test}test"
376:デフォルトの名無しさん
18/12/22 16:59:32.04 YB2ocxbA.net
>>363
そういえば日本語の変数もできるんでしたね
377:デフォルトの名無しさん
18/12/22 17:09:04.46 HuIkWn7P.net
【たけしの超常現象特番、本日18時56分】 大槻教授がUFOやマⅰトレーヤを見たらどんな反応するかな
スレリンク(liveplus板)
378:デフォルトの名無しさん
18/12/22 17:15:32.75 uHYOaa0r.net
ダブルコーテーション内で変数を値展開させたい場合空白文字で区切られていないとだめ。つまり
echo "$hoge fuga"
であれば
hoge fuga
にはなる。
hogefugaを得たい場合、俺なら
echo ($hoge+"fuga")
と書く
379:デフォルトの名無しさん
18/12/22 18:16:02.24 UGqq2IDw.net