Windows PowerShell Part4

このエントリーをはてなブックマークに追加
1名無し~3.EXE
2名無し~3.EXE:2013/02/01(金) 22:57:56.24 ID:P16cmkUb
ほえ
3名無し~3.EXE:2013/02/02(土) 15:31:42.88 ID:5A0M16UM
PowerShellでXMLファイルのタグ間のスペースや改行を全て削除して1行にしてしまうことは出来るのでしょうか?
4名無し~3.EXE:2013/02/05(火) 01:10:24.76 ID:PPHkdWV+
DOSの「echo off」みたいにコマンド自体を出力させないことは出来ますか?
5名無し~3.EXE:2013/02/06(水) 02:07:58.27 ID:UAu+l7P7
結局いまだに、
UNIX系OS -> ssh/telnet -> windows
でログインして powershell をまともに使う方法ってないの?
6名無し~3.EXE:2013/02/07(木) 00:33:44.04 ID:AJ2IePn6
かなり前からPowerShell Serverあるじゃん
7名無し~3.EXE:2013/02/07(木) 07:44:59.62 ID:dZcBLVES
PowerShell Serverで接続して、日本語っつか、
マルチバイト文字列まともに表示できてる?
もしできてるなら、やり方教えてちょーだい
8名無し~3.EXE:2013/02/07(木) 21:00:23.26 ID:7/PPpfYU
あー、日本語表示は駄目っぽいかな?
9名無し~3.EXE:2013/02/07(木) 21:54:32.03 ID:dZcBLVES
むー、やっぱダメなんだよね。
自分的には、Windowsいじるのに日本語使えないってのは
きつすぎる制限なので…

UNIX系OSからの ssh/telnetでマルチバイト文字列表示不可ってのは、
Win8/2012 + PowerShell3.0 + PowerShell Server
か、
Win8/2012 + PowerShell3.0 + OS付属の telnetサーバ
で修正されてたりしないのかな?
誰か確認した人いる?
10名無し~3.EXE:2013/02/07(木) 22:12:05.01 ID:7/PPpfYU
2012でいいならPowerShell Web Accessっていう任意のブラウザからリモートできる機能はあるよ
ttp://viewse.blogspot.jp/2013/01/windows-server-2012-powershell-web.html
11名無し~3.EXE:2013/02/07(木) 23:07:40.30 ID:dZcBLVES
>>10
情報ありがと。
残念ながらWin8/2012どっちも持ってなかったりする。
質問の意図は、もしWin8/2012で直ってたら、そのうち 7/2008に
hotfixが来る希望が持てるかも、と思ってのことなのよ。

つか、2012の新機能に sshサーバ機能つけるんじゃなくて
「Powershell Webアクセス機能つけますた!」とか、
相変わらず MS ってずれてるよね。

なんかこの PowerShell Web Access にしても、
たとえば ubuntu上の firefox/chrome/opera辺りから
使ってちゃんと機能するのかな?
具体的にはタブ補完がストレスなく機能するかどうかが気になる。
12名無し~3.EXE:2013/02/08(金) 21:39:15.24 ID:zuNTw9S7
>>11
タブ補完はできるけど使用制限はいくつかあるみたいだね
technet.microsoft.com/ja-jp/library/hh831417.aspx#BKMK_web
(リンク貼れないのでスキーム削除)
13名無し~3.EXE:2013/02/11(月) 23:45:51.31 ID:VDCPnsYt
そんなこんなでpowershell.exe上でGUIライクなキーバインドとUIを再現してみた
Shift+矢印でテキスト選択してコピーとか切り取りとか貼り付けとかその辺
PowerShell ISEのコンソール使えばいいじゃん、とか思わない人向け

(V3限定)
ttp://gallery.technet.microsoft.com/scriptcenter/WindowsKeyBinding-for-60fb0d55

zipファイルをダウンロードして解凍したフォルダを
環境変数%PSModulePath%に入ってるパス直下に置いたら
Import-Module WindowsKeyBinding で使えるようになるはず

元に戻す(Ctrl+Z)は実装してないし、複数行編集機能とかはないです
奇特な人は使ってみてくださいな
14名無し~3.EXE:2013/02/12(火) 20:55:13.05 ID:RSrnhbKH
>>11
ちょっと中の人にメールしてみたんだけど
WireEncodingっていうので文字コードの設定はできるよーって言われた
PowerShell Serverのウインドウの 「Other」タブにWireEncodingって
プルダウンメニューがあるからそれで変更してみてってことなんだけど
自分のはコマーシャルユースだからかそういうメニューはなかった


で、ヘルプ見たらレジストリで直接指定できるらしい
↓参考に編集した
ttp://www.powershellmagazine.com/2011/12/27/powershell-linux-to-windows-integration-encoding-problem/
HKEY_LOCAL_MACHINE\SOFTWARE\PowerShellInside\PowerShellServer に
WireEncodingを自分で追加していろいろエンコード指定できる
メールでもらったところによると日本語関係は

UTF-8 → UTF-8
Japanese (JIS) → iso-2022-jp,
Japanese (JIS-Allow 1 byte Kana) → csISO2022JP,
Japanese (JIS-Allow 1 byte Kana - SO/SI) → iso-2022-jp,
Japanese (EUC) → euc-jp

みたいな感じ
自分の場合は「iso-2022-jp」を値としてセットしたら無事日本語ファイル名もlsで表示できるようになったよ
1511:2013/02/13(水) 01:10:32.62 ID:sKV7QqvQ
>>14
ううううううぅぅうぅっひょーぅぅぅぅうううううう!!!
ありがとー、ありがとー、ありがとー、ありがとー!!!
まじでいけたよ。これでちょっと楽しい PowerShell ライフをすごせるぜ。

環境
 server: windows server 2003 R2 SP2 + PowerShell Server 5.0.0.4482 Personal Edition
 client: debian squeeze 6.0.6 + openssh-client 1:5.5p1-6+squeeze3

手順
 1. サーバ側に PowerShell Server インストール
 2. PowerShell Server レジストリの設定
   # powershell 起動 -> 下記実行(値として UTF-8を指定)
   New-ItemProperty hklm:\SOFTWARE\PowerShellInside\PowerShellServer WireEncoding -PropertyType String -Value UTF-8
 3. PowerShell Server Service Restart
 4. クライアントから接続、今回はmltermを使用 LANGはja_JP.UTF-8
   # "TERM=vt100" はけっこう重要。これで Clear-Hostや方向キーとかが効くようになる
   TERM=vt100 ssh -l username ip_address
 5. 日本語表示の確認 ↓とかしてみる
   Get-Help about_windows_powershell_2.0

ちなみに、v5のPersonal Editionでは、「Other」タブに
WireEncodingプルダウンメニューはありませんでした。

いやでもまじでうれしいわー、ほんとにありがと。
16名無し~3.EXE:2013/02/13(水) 08:20:26.02 ID:OycAsz/I
>>14,15 乙

さっき確認したら、PowerShell Server V5 HelpにちゃんとWireEncodingのことは
書いてあったけど、あれを見つけるのはやっぱちょっときびしいよなぁ…
まぁでもなんか、ちゃんと書いてあったから /n softwareに対する好感度は上がったわ。

んで、"PowerShell Server" WireEncoding でググってみたら、
https://www.google.com/search?q=%22PowerShell+Server%22+WireEncoding&complete=0&safe=off&num=100&hl=ja&lr=&tbo=1&sei=askaUez9D-TAmQWNj4CoBA&gbv=2
>>14 と同じURLしか出て来なくてちょっと笑った。

もしかして、>>14が日本国内で ssh越しのpowershellで
日本語使用できた最初の人物てことだったりするのかな?
うーむ、なんかすげーな、快挙だ。
17名無し~3.EXE:2013/02/13(水) 23:58:32.62 ID:zCDglrPc
いやまあメールしたのが快挙っていうなら快挙なんだろうけど、素直に中の人褒めてあげてw
夜中の8時にメール出して次の日の午前中には返信くれたんだしさ(日本時間換算で)
18名無し~3.EXE:2013/02/15(金) 01:54:42.69 ID:kjpS2zqC
ぶった切って悪いが、メモ帳といいPowerShellの-Encodingオプションといい
なんでEUC-JPが指定できないんだろうね。
もしかしてSUNを敵対視するMSの戦略なのかな?
19名無し~3.EXE:2013/02/15(金) 03:32:23.95 ID:9ndxPvVm
ほぼすべてのUNIX系OSは UTF-8へ移行済みなんだから、
その考え方は違うんじゃないの?
まだ単に MSKKが頑張らなかったって方が説得力あるわ。
まぁでも、古いOSが残ってて実運用上困るっていうか
めんどくさいのはわかるんだけどさ。
20名無し~3.EXE:2013/02/15(金) 05:14:00.88 ID:9ndxPvVm
思い出したから、PowerShell 3.0のドキュメント類のURL貼っとく。
他にも見つけたらどんどん貼っていこうぜ。

Download Windows PowerShell Language Specification Version 3.0
http://www.microsoft.com/en-us/download/details.aspx?id=36389
Download Windows PowerShell and Server Manager Quick References
http://www.microsoft.com/en-us/download/details.aspx?id=30002
Download Windows PowerShell and Microsoft Management Console 3.0 Quick Start Labs
http://www.microsoft.com/en-us/download/details.aspx?id=12971

ついで。
The complete list of PowerShell ISE 3.0 keyboard shortcuts
http://www.powershellmagazine.com/2013/01/29/the-complete-list-of-powershell-ise-3-0-keyboard-shortcuts/
21名無し~3.EXE:2013/02/15(金) 23:00:29.60 ID:T0Va3zKZ
-Encodingは単に、System.Text.Encodingクラスでよく使う?文字コードが静的メンバになってるから
じゃあうちらもそれに倣ってとりあえずそれだけ対応しとくかー、的なノリだと思う
以前Connectにもっと増やしてって要望は出したけど、ユーザーの需要は低かったよ
22名無し~3.EXE:2013/02/23(土) 22:51:10.87 ID:lyOzc5Vv
さっきPowerShell Server V6が出てるのに気がついてPersonal Edition入れてみた。
PowerShell 3.0対応はやっぱありがたい。

>>14
んで、"Other"タブ -> Additional Settings -> Text Encoding で Encodingの
設定できるようになってるから、V6のことだったっぽいね。

PowerShell Server
http://www.powershellserver.com/order/
23名無し~3.EXE:2013/02/24(日) 19:08:57.93 ID:IzryZIel
あるフォルダに文字コードがSJISとUTF8のテキストファイルが複数あり
そのファイル名と文字コードを一覧表示しようとしていますが

gci c:\tmp *.txt | select name

でファイル名は表示できたのですが、文字コードの表示の仕方がわかりません…
24名無し~3.EXE:2013/02/24(日) 20:39:52.33 ID:CCwh23wu
少なくとも標準でそういう機能はない
nkfなりなんなり拾って来ないと
25名無し~3.EXE:2013/02/24(日) 22:36:40.04 ID:IzryZIel
>>24
そうなのですか…
実はUTF8の方は1バイト目がFE、2バイト目がFFで始まるということが判明したので
これで何とか出来ないか調べていたのですが、私にはハードルが高すぎましたw
もう少しググってみます。
26名無し~3.EXE:2013/02/27(水) 19:02:14.30 ID:FyrWNfjS
X日以上前のファイルを消したいのですが
$file_listが空の場合にCreationTimeで
MethodCountColudNotFindBestエラーが発生します。
空なのになぜforeachの中に入っていくのですか?

$file_list = Get-ChileItem DIR -Recurse
foreach( $file in $file_list ){
$diff = ((Get-Date) - $file.CreationTime).Days
}
27名無し~3.EXE:2013/02/27(水) 21:02:58.59 ID:Q2Y9j4YZ
>>23
確認はしてないけど、powershell 3.0 ならこれが使えるんじゃない?

GetContent.Encoding Property (Microsoft.PowerShell.Management.Activities)
http://msdn.microsoft.com/en-us/library/microsoft.powershell.management.activities.getcontent.encoding%28v=vs.85%29.aspx
28名無し~3.EXE:2013/03/06(水) 00:39:26.43 ID:J9FxhtYe
CSVファイルをconvertfrom-csvでオブジェクト化して
sort-objectで1列目と2列目をキーに並べ替えてるのだけど
「1列目で昇順かつ2列目で降順」みたいに列毎に
異なるソートオーダーを指定するにはどうすればよいのでしょうか?
29名無し~3.EXE:2013/03/06(水) 11:24:22.99 ID:1pVvA2v8
昇順ソートして逆にしたい列だけ頭から入れ替えて配列に入れてもっかいCSVにすりゃいいんじゃないですかね
列ごとにソート入れ替えて構造ぶっ壊すことに何の意味があるんだか知らんけど
30名無し~3.EXE:2013/03/06(水) 19:55:16.75 ID:mk6DN1pj
>>28
Sort-Object @{E="1列目キー名";Ascending=$true},@{E="2列目キー名";Descending=$true}
みたいな?
31名無し~3.EXE:2013/03/06(水) 19:57:47.30 ID:mk6DN1pj
>>26
それPowerShell2.0までの仕様
3.0では直ってる
32名無し~3.EXE:2013/03/06(水) 23:21:58.01 ID:J9FxhtYe
>>29
言ってる意味がよくわからんとです…

>>30
出来ました!ありがとうございます!
ググっても全然わからなかったので助かりました。

gci -r | Sort-Object @{E="directoryname";Ascending=$true},@{E="lastwritetime";Descending=$true}
33名無し~3.EXE:2013/03/09(土) 12:57:54.52 ID:EtopiWLs
あるサイトで見かけたんだけど、Get-Contentでファイル内容取得する時に

(gc a.txt) -ne ""

って書くと空行を除外出来るんだね。
他にも面白い書き方ってあるのかな?
34名無し~3.EXE:2013/03/10(日) 13:22:17.17 ID:anqyefhn
気がついたら、過去の異物のようなスクリプトになったよな。
色つきでファイル一覧出すようにいろいろやったら、ファイルにリダイレクトできないとか、なんだよこれ的な。
35名無し~3.EXE:2013/03/11(月) 23:50:06.37 ID:EbbX4PbJ
>>32のは
gci -r | Sort @{E="directoryname"},@{E="lastwritetime";D=$true}
でもいけるな。
最近どれだけ短縮できるか試すのが趣味になってきたw
get-helpもhelpでいけるし、些細だがオプションの-fullも-fulでいける。
36名無し~3.EXE:2013/03/18(月) 22:01:16.89 ID:EH72HxRl
スクリプトファイル(拡張子ps1)を実行した時に開くPowerShellのウインドウを最前面固定表示させる方法はあるのしょうか?
もしくはスクリプトファイル内のコードでメッセージボックスを表示してそのメッセージボックスが最前面固定表示されるということでもよいのですが?
37名無し~3.EXE:2013/03/22(金) 21:49:17.05 ID:jrvx7jh0
SetForegroundWindow
3836:2013/03/24(日) 09:30:43.67 ID:qAYOPSLY
>>37
ありがとうございます。その関数名でググって以下のコードを実行しましたが
スタートボタン右側のPowershellのアプリアイコンが点滅するだけで
最前面に出てこないようです、ぐぬぬ…
(ちなみに実行したらすぐ他のアプリを最前面に出し、3秒後にPowershellのアプリが最前面に出てくるかを試しました)
もう少し調べてみます。

Add-Type @"
using System;
using System.Runtime.InteropServices;
public class Tricks {
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetForegroundWindow(IntPtr hWnd);
}
"@
$h = (Get-Process -id $pid).MainWindowHandle
sleep -sec 3;
[Tricks]::SetForegroundWindow($h)
39名無し~3.EXE:2013/03/24(日) 15:40:55.33 ID:1DAbsddX
//Form1.cs
Form2 f = new Form2();
f.Owner = this;
f.TopMost = true;
f.Text = "Alarm Clock";
f.GetOtherFormTextBox();
f.Show();
40名無し~3.EXE:2013/03/25(月) 14:06:38.63 ID:P63WGLv/
C#でプログラム作ったほうが手っ取り早くないか?
41名無し~3.EXE:2013/04/01(月) 01:40:07.08 ID:yHOeJADt
これ興味あるんだけど、まだぜんぜん勉強してない。
見た感じ、JavaScriptにちょっと似てる気がするんだけど、JavaScript使いなら取っ付きやすいかな?
それにしても、Unixのシェルとはまったく似ても似つかないシェルですね。
42名無し~3.EXE:2013/04/01(月) 10:35:59.35 ID:QWDBrUta
Shell+Perl みたいなもんかな。
とりあえずPerl知ってりゃ、解説書読みながらすぐ書ける
でも、結局ちょっと突っ込んだことやろうとすると.netの知識が必要になるし、
プログラム言語としては、コーディングしながらエラーも表示してくれるVS+C#で、
http://dobon.net/vb/dotnet/index.html
見ながらの方が手っ取り早いことがわかった。
43名無し~3.EXE:2013/04/01(月) 10:39:02.88 ID:QWDBrUta
UnixでC/C++使ってたときは補助的にシェルスクリプトが必須だったが、
WindowsだとC#だけでほぼ事足りるかな?
いつまでたってもVSで開発環境できないし。
44名無し~3.EXE:2013/04/01(月) 23:04:51.68 ID:WKr3+D0n
良さが伝わらなかったか。残念。
45名無し~3.EXE:2013/04/05(金) 23:10:55.52 ID:92UulP1I
PowerShellServerって何が出来んの
46名無し~3.EXE:2013/04/06(土) 01:02:00.08 ID:EOLiam6e
47名無し~3.EXE:2013/04/06(土) 02:36:55.33 ID:3dHuatwa
Visual StudioにPSも取り込まれるって話なかった?
48名無し~3.EXE:2013/04/13(土) 18:50:10.18 ID:HoxSXCBU
そもそもなんでVSやC#が出てくるのか意味不明なんだが
なにをやろうとしてんの?
49名無し~3.EXE:2013/04/14(日) 01:44:12.22 ID:j4V6CaxB
【速報】ついに俺氏が重い腰を上げてPowerShellはじめる
50名無し~3.EXE:2013/04/14(日) 06:40:12.54 ID:Rk2nk+F5
>>48
開発環境としていろんな支援があるVSの話が出てきても悪くないだろ
C#は.netの主力開発言語、PSにしたって結局.net上で動いて、ちょっと凝ったことをやりたきゃ
.netのライブラリ使う羽目になるだろ。それだったらコンパイルの手間は要るけどはじめからC#使っても同じってこと。
実際PSで作りだめたスクリプトをC#に移植したわ。PSのファイルに"[]"を含む場合のバグ問題もなく実にスンなり移植できた。
これだけ.netのライブラリが豊富だとシェルスクリプト持ち出してくる必然性があんまないんだな。
Perl使ってるときスクリプト言語特有の連想配列とか便利だなと思ったけど
C#でもハッシュテーブル使えるしな。
コマンドプロンプトと同じく、プログラム未満のコマンドラインとしての存在意義はあると思うけどさ。
51名無し~3.EXE:2013/04/15(月) 00:45:35.21 ID:LgG6I3Da
客先常駐とかで仕事してるとps1ファイルを実行できるように権限変えることが出来なかったりするからな。
結局ISEにコード貼り付けて実行したりbatファイルと組み合わせたりしてる。
52名無し~3.EXE:2013/04/15(月) 22:15:14.80 ID:HfyxT8zE
Import-Csv -Path hoge.csv | Sort-Object { [int]$_.pk1,$_.pk2 }

みたいな事を、{ [int]$_.pk1,$_.pk2 } の部分を動的に指定するにはどうすればよいでしょう?

型変換不要ならば、

$sortKeys = @( 'pk1','pk2' )
Import-Csv -Path hoge.csv | Sort-Object -Property $sortKeys

の様な感じにすればできるんですが。
53名無し~3.EXE:2013/04/16(火) 01:18:52.76 ID:oRbHsI59
>>52
数値列をゼロ埋めで桁数固定にして文字として扱えば型変換不要だがどうよ?
ってダメだろうなあ…w
54名無し~3.EXE:2013/04/16(火) 21:12:52.16 ID:J3OAKPis
>>53
ありがとうございます。
結局、ForEach-Objectで個別に型変換して対応しました。

ちょー省略すると、

$sortKeys = @( 'pk1','pk2' )
Import-Csv -Path hoge.csv |
ForEach-Object -Process {
$_.pk1 = [int]$_.pk1 # <- 本当は整数型にすべきカラムを判定して変換している
$_
} |
Sort-Object -Property $sortKeys

みたいな感じです(^^;
55名無し~3.EXE:2013/04/21(日) 20:13:06.72 ID:2H/ka75W
Get-Counterってプロセスの増減を取得できないんですかね?

$s = {$($(Get-Counter "\Process(*)\% Processor Time").CounterSamples).Count}
$o = Start-Process notepad -PassThru
&$s
$o | Stop-Process
&$s #←減った分がとれない
56名無し~3.EXE:2013/05/02(木) 17:08:05.20 ID:zjmPKOf6
XP機を根絶できたので、今後のスクリプトはPowerShellに移行するぜ、
と意気込んでいたのに、拡張子が実行に関連付けられていないだの、
セキュリティポリシーの変更が必要だの、使わせる気ないのか

それならばと標準入力から喰わせてみたんだが、なぜかスクリプトの
一部が実行されたりされなかったり挙動がよくわからん


下のスクリプトを"-Command -"オプションでリダイレクト入力した場合
f2()を途中改行せずに1行にするか、#以降の末尾に改行を2つ以上
書くかしなければ、出力結果が"1 2"で止まってしまって"3"が出ない
これはバグなのかそれとも仕様?
Win8Pro64bitで確認、確かWin7のPowerShell3.0でも同じだったと思う

Write-Host 1
function f1() { }
Write-Host 2
function f2() {
}
Write-Host 3
#
5756:2013/05/02(木) 18:18:11.23 ID:zjmPKOf6
半日かけてようやく実行可能なバッチファイルが書けたわw
これで心置きなくPowerShellの学習を始められるというもの

PSの文法とかまだヌルい所があるはずなので添削求む
それか他にも同じようなことしてるblogとかないですかね?


@(":", "`""<#") 2>NUL
@POWERSHELL -Command - <%0
@EXIT /B
#>)|%{}

Write-Host "Hello world!"
58名無し~3.EXE:2013/05/02(木) 18:30:12.57 ID:zjmPKOf6
あ、終了コード戻すの忘れてた
3行目 @EXIT /B %ERRORLEVEL%
59名無し~3.EXE:2013/05/06(月) 12:43:59.56 ID:PtnoW0PE
あるソフトウェアのインストール前後でレジストリのどこに変更があったかをPowerShellで表示することはできますか?
60名無し~3.EXE:2013/05/07(火) 10:55:07.14 ID:wzO23jzh
>>57
ギャグ?
61名無し~3.EXE:2013/05/08(水) 14:32:55.69 ID:EFA3dg2I
放置よろ
62名無し~3.EXE:2013/05/15(水) 00:15:29.62 ID:/++F9Bvl
LinuxやMacなどに対応したWindows PowerShell、ついに登場!もうWindows買わなくていいぞ
http://engawa.2ch.net/test/read.cgi/poverty/1368543510/
63名無し~3.EXE:2013/05/15(水) 11:05:52.19 ID:QP8evULf
はっきりいってPowerShellは非Win環境でこそ本領発揮できるかもしれん
コマンド環境で結局.metの上にのってりゃ未来永劫DOSの代わりにならんし
非Win環境でもバーチャル環境で動くなら同じだけどな.

言語としてとってもいいとおもうけど
.net のライブラリがあまりに豊富すぎて補助言語として頼ることもあんまりない
64名無し~3.EXE:2013/05/16(木) 10:09:43.03 ID:itkrrJnw
PowerShellはCOOL
65名無し~3.EXE:2013/05/20(月) 21:59:44.78 ID:8t/QsC8y
すみません質問があるのですが、前スレの>>436

>ps1の実行には必要でもps1を読んで実行する分には必要ない

という記述があり、ExecutionPolicyがRestrictedのままでも
ps1ファイルを実行する手段があるかのように受け止められるのですが
そのような方法があるのでしょうか?
66名無し~3.EXE:2013/05/21(火) 10:56:15.98 ID:0tAMOPu9
っ PowerShellコマンド
67名無し~3.EXE:2013/05/21(火) 11:31:52.91 ID:xV50CXXD
powershell -ExecutionPolicy RemoteSigned .\test.ps1

ttp://blogs.msdn.com/b/jaybaz_ms/archive/2007/04/26/powershell-polyglot.aspx
6865:2013/05/23(木) 00:28:50.12 ID:wUd2eF9W
>>67
ありがとうございます。こんなことが出来るのですね。
今日試しましたがschtasksの/trにこのまま書いたら
スケジュールした時刻にバッチリ動きました。
でもこれじゃExecutionPolicyの意味ないんじゃ…w
69名無し~3.EXE:2013/05/24(金) 00:02:10.22 ID:cRNJAwAN
ぷっ
70名無し~3.EXE:2013/05/25(土) 09:52:33.45 ID:n7h7yVSA
攻撃者がすでに対象のPCにログインしている状況なら、わざわざ実行ポリシー変更してどうこうしないよ
71名無し~3.EXE:2013/05/26(日) 13:36:11.82 ID:bcqqEQci
72名無し~3.EXE:2013/05/26(日) 16:46:52.25 ID:fl9FtV/o
まー分かんなかったら暇な時にでも読んでみて

PowerShell’s Security Guiding Principles
ttp://blogs.msdn.com/b/powershell/archive/2008/09/30/powershell-s-security-guiding-principles.aspx

Now, why is

PowerShell.exe ?ExecutionPolicy Bypass ?File c:\temp\bad-script.ps1

not a security bug? Ultimately, if bad code has the ability to run this code, it already has control of the machine.
73名無し~3.EXE:2013/06/12(水) 11:47:55.94 ID:KnqvhY8H
PowerShellをエクスプローラからダブルクリックで起動すると、コマンドプロンプトの画面になってしまうのですが、
ランチャツールからの起動でもブルーの画面を出すにはどうすればいいでしょうか?
74名無し~3.EXE:2013/06/14(金) 14:10:39.02 ID:Ogktd9xI
ショートカットを起動すりゃいいよ
75名無し~3.EXE:2013/06/14(金) 19:54:49.02 ID:O/HHNdcE
>>73
表示された画面左上のプロパティで好きな色変えたら?
次に起動するときには変わってるよ。
コマンドプロンプト画面じゃなくてコンソールプログラム画面ね。
76名無し~3.EXE:2013/07/01(月) NY:AN:NY.AN ID:6Gorspep
77名無し~3.EXE:2013/07/18(木) NY:AN:NY.AN ID:vNfij1oE
Windows 8.1 Preview インスコしたら PowerShell が Version 4.0 になっててびっくりした。
とりあえず Update-Help した。
78名無し~3.EXE:2013/07/28(日) NY:AN:NY.AN ID:b0JCajYQ
一般ユーザでpowershellのコンソール開いて、
そこからコマンドで権限昇格することってできないんでしょうか?
(linuxのsuコマンドのように)

調べてはみたんですが方法がみつからなくて。。
コマンドで『管理者として実行』の状態にしたいんです。
79名無し~3.EXE:2013/07/30(火) NY:AN:NY.AN ID:c5tbI6TT
そんなことができるとでも?
80名無し~3.EXE:2013/07/30(火) NY:AN:NY.AN ID:SjHHym1J
-Credentialつけるんじゃだめなんか
81名無し~3.EXE:2013/07/30(火) NY:AN:NY.AN ID:oOaSq9iE
なんでそうしたいのか書いた方が別の解決策を教えてもらえるかも
8278:2013/08/05(月) NY:AN:NY.AN ID:We+ZS8Ar
レスありがとうございます。

>>80
調べてみます。
>>81 
ただ単純に「マウスを使わずにできないのかな?」って思っただけでした。。
83名無し~3.EXE:2013/08/08(木) NY:AN:NY.AN ID:vlDQ9n5Z
別ウィンドウで良ければ$pshome\powershell.exe -verb runas
84名無し~3.EXE:2013/08/08(木) NY:AN:NY.AN ID:vlDQ9n5Z
>>83
失敗した。
start-processつけないと。

> function su {start-process $pshome\powershell.exe -verb runas}
> su

こんな感じかな。
8578:2013/08/08(木) NY:AN:NY.AN ID:iLDShGTk
>>84
ありがとうございます!
やってみました。
こんな方法もあったんですね。
86名無し~3.EXE:2013/08/08(木) NY:AN:NY.AN ID:VDs3Noo9
正規表現についてお聞きしたいのですが以下はなぜTrueになるのでしょうか?
「数字、文字、数字」という並びがないとTrueにならないと思うのですが?

PS C:\> $("123abc") -match "\d\w\d"
True
87名無し~3.EXE:2013/08/08(木) NY:AN:NY.AN ID:2c1tYyj+
「\w」は文字ではなく単語なので数値も含んでます故
88名無し~3.EXE:2013/08/09(金) NY:AN:NY.AN ID:s4EjgHz+
>>87
単語なのに数値も含むとは知りませんでした!
確かに「$("1") -match "\w"」でもTrueになりますね。
ご教授ありがとうございます。
89名無し~3.EXE:2013/08/10(土) NY:AN:NY.AN ID:vBMk/Cjn
Poweshellは正規表現が強力みたいだけど
コマンドプロンプトで「"AAA"で始まるか又は"CCC"で終わり、かつ"BBB"を含む」行を
"C:\Temp"フォルダ内(サブフォルダ含む)の全テキストファイルから検索して表示する場合

findstr /s /r /c:"^AAA" /c:"CCC$" "C:\Temp\*.txt" | findstr /r /c:".*BBB"

みたいな正規表現によるOR検索とAND検索の組み合わせ検索をよくやるんだけど
これって簡単にPowershellに書き換えられるの?
90名無し~3.EXE:2013/08/10(土) NY:AN:NY.AN ID:klVY5+KV
>>89
findstrに相当するのはselect-stringですね。
gci C:\temp -filter "*.txt" -recurse | % {select-string "^AAA.*BBB|BBB.*CCC$" $_.fullname -encoding default}
という感じでどうでしょうか。
91名無し~3.EXE:2013/08/10(土) NY:AN:NY.AN ID:vBMk/Cjn
>>90
なるほどこんなに簡単に書けるんだね。
-encodingオプションあるのか!これならUTF8とかも検索できるし便利だなあ。
勉強になりました。どうもサンクスです。
92名無し~3.EXE:2013/08/17(土) NY:AN:NY.AN ID:RjFEQbYE
http://tech.aainc.co.jp/archives/643

↑に住所にマッチする正規表現があったので↓のスクリプトを書いてみたのですが、実行するとエラーになります。
何か使えない文字があるのでしょうか?
「ccc 東京都千代田区永田町1−7−1 ddd」という結果を得たいのですが?

$a="aaa 東京都千代田区永田町1−7−1 bbb"
$a -replace "(([^"'=])((北海道|東京都|(大阪|京都)府|(神奈川|和歌山|鹿児島)県|[^\s\w\d ]{2}県)[^\s\w\d ]{1,6}[市郡区町村][^\s\w\d ]{1,20}[\d0-9〇一-九十上下東西]+[^\s '"<)」】]*))",'ccc $1 ddd'
93名無し~3.EXE:2013/08/17(土) NY:AN:NY.AN ID:4N1MHd0p
>>92
ダブルクォート中にダブルクォートが入ってるから「`」でエスケープ
あとPowerShellは「\w」が半角英数字以外にもマッチするから「A-Za-z」とかに変える必要がある
94名無し~3.EXE:2013/08/18(日) NY:AN:NY.AN ID:AGzu2vK6
面白そうなのでやってみた

> $a="aaa 東京都千代田区永田町1−7−1 bbb"
> $regex = [regex]"(([^`"'=])((北海道|東京都|(大阪|京都)府|(神奈川|和歌山|鹿児島)県|[^\s\w\d ]{2}県)[^\s\w\d ]{1,6}[市郡区町村][^\s\w\d ]{1,20}[\d0-9〇一-九十上下東西]+[^\s '`"<)」】]*))"
> $regex.Match($a).Success
False
> $regex = [regex]"(([^`"'=])((北海道|東京都|(大阪|京都)府|(神奈川|和歌山|鹿児島)県|[^a-zA-Z\s\d ]{2}県)[^a-zA-Z\s\d ]{1,6}[市郡区町村][^a-zA-Z\s\d ]{1,20}[\d0-9〇一-九十上下東西]+[^\s '`"<)」】]*))"
> $regex.Match($a).Success
True
> $regex.Match($a).Result("ccc `$1 ddd")
ccc 東京都千代田区永田町1−7−1 ddd

Wordはマルチバイトでもおkと。なるほど。
9592:2013/08/18(日) NY:AN:NY.AN ID:xIR2OqWI
>>93
ありがとうございます。正規表現は言語によって微妙に「\w」とかの意味が変わるんですね。
エスケープの仕方も知りませんでした…

>>94
試して頂いてありがとうございます。こんな書き方も出来るんですね。
申し訳ありませんが、まるっとコピーさせて頂きました(笑)
96名無し~3.EXE:2013/09/01(日) 11:46:53.16 ID:fFVs7j+O
visual studio2012のコマンドラインツールのpowershell用セットアップスクリプトはMicrosoftから出ているのでしょうか?
powershellからmabuildやguidgenなどのコマンドラインツールを使いたいのですが設定方法がわかりません
コマンドプロンプト用の設定スクリプトをpowershellで実行しましたがうまく行きませんでした
97名無し~3.EXE:2013/09/01(日) 16:40:10.41 ID:eE7viCPv
>>96
$env:path+=";C:\Program Files\Microsoft Visual Studio 12.0\Common7\Tools;C:\WINDOWS\Microsoft.NET\Framework\v3.5"
set-alias guiden "C:\Program Files\Microsoft Visual Studio 12.0\Common7\Tools\guidgen.exe"
set-alias msbuild "C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe"
としておけば
guiden
msbuild
と入力するだけで使えると思います。

msbuildはテスト出来なかったので環境変数の使い方

testという環境変数を作り、値を"aaaa"とします。
PS C:\> New-Item -Path env:test -Value "aaaa"

環境変数testに"bbbb"を代入します。
PS C:\> $env:test="bbbb"
PS C:\> $env:test
bbbb

環境変数testに"cccc"を追加します。 ($env:test+="cccc"と書いても同じです)
PS C:\> $env:test=$env:test + "cccc"
PS C:\> $env:test
bbbbcccc

環境変数testを削除します。
PS C:\> Remove-Item env:test
PS C:\> $env:test
PS C:\>

なお、環境変数やエイリアスはセッション終了(PowerShell終了)とともに消えます。
マイドキュメント\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 に書いておけばPowerShell起動の度読み込んでくれます。
98名無し~3.EXE:2013/09/01(日) 22:15:29.62 ID:mMSZhAI9
>>97
ありがとうございます

cmd用に書かれた設定スクリプトをそのまま再利用出来ないのは不便ですね
99名無し~3.EXE:2013/09/15(日) 16:34:39.20 ID:nSfRh2yc
powershellで1からやるならいいんだろうけど
環境変数設定batすら動かないとやる気なくすよなあ
100名無し~3.EXE:2013/09/15(日) 20:37:24.70 ID:NkOIlLsv
機械的に書き直せると思うけど、それも面倒なら
設定スクリプトの一番最後でPowerShellスクリプト呼び出せばいいんじゃない?
101名無し~3.EXE:2013/09/15(日) 21:09:10.46 ID:QMDr6jpe
>>100
vcvarsall.batはbatにしちゃ長いし書き直しもそれなりに面倒
まったく同じことやるだけなのにわざわざ直す時間が惜しいという感覚はあるだろ
なに?そのPowerShellスクリプトをどうやって新たにつくるわけ?
102名無し~3.EXE:2013/09/15(日) 22:06:13.82 ID:QA3l3UUR
>>101
いやvcvarsall.batがどうなってるのか持ってないから知らんけどね
基本set ほげほげ=ふがふが を機械的に $env:ほげほげ=ふがふがに置き換えればいいと思うけど

で、それも面倒ならvcvarsall.batの一番最後でスクリプト呼び出すなり
cmdでvcvarsall.bat呼び出した後にpowershell起動するなり
やりようはあると思うよ
103名無し~3.EXE:2013/09/15(日) 23:35:24.23 ID:56qbimk1
もちろん必要なのはパス部分の数行だけど
まんまそのまま完全に使えるスクリプトがあるのに
小細工や機械的に書きなおす手間が面倒だって言ってんだけど噛み合ってないよね
無理に移行する価値があるのかも疑問だし

ってかちょっと強引な押し売りとか宗教の勧誘の手法みたいなところあるよね?
たいしてやる気がない人に押し付けてこなくていいから
10499:2013/09/15(日) 23:38:47.55 ID:56qbimk1
ってか>>98>>99
この2週間の間に>>98に提案して欲しかったなあ
俺は茶々で特に積極的にやってるわけじゃないからレスされても困惑
105名無し~3.EXE:2013/09/16(月) 00:02:02.99 ID:Sz0fR4Og
よく分からんがPowerShellスレで聞かれたことに答えるのは押し売りなのか・・・
106名無し~3.EXE:2013/09/16(月) 05:28:24.03 ID:uHkT2fBv
bat再利用したいならPSから喚び出しゃいいだろ
コードそのまま置換したってパイプラインもPSObjectも.netも使わないならヤる意味が無い
107名無し~3.EXE:2013/09/16(月) 17:30:19.33 ID:CdMzda7A
リモートでLAN内のPCをスリープさせたいと思って

[sleep.ps1]
$signature = @"
[DllImport("powrprof.dll")]
public static extern bool SetSuspendState(bool Hibernate,bool ForceCritical,bool DisableWakeEvent);
"@
$Sleep = Add-Type -memberDefinition $signature -namespace "Win32Functions" -name

"SetSuspendStateFunction" -passThru
'スリープします。'
$Sleep::SetSuspendState($false,$false,$false)


上記のスクリプトをInvoke-Commandで呼び出すことにしました。

$SO = New-PSSessionOption -OperationTimeOut 1000 -OpenTimeout 100 -CancelTimeout 100 -IdleTimeout 100
Invoke-Command 対象PC名 .\sleep.ps1 -SessionOption $SO


結果、対象PCは無事にスリープしてくれるのですが、

リモート サーバーからのデータの処理が失敗し、次のエラー メッセージが返されました。 (中略)
+ CategoryInfo : OperationStopped: (System.Manageme...pressionSyncJob:PSInvokeExpressionSyncJob) []、
PSRemotingTransportException
+ FullyQualifiedErrorId : JobFailure

というエラーが出ます。

なんとかしてスクリプトを正常終了させたいのですが、
Try-Catch文を使う以外に、なにか方法はないでしょうか?
108名無し~3.EXE:2013/09/16(月) 20:49:23.66 ID:lnD2w2io
>>107
リモートジョブにして結果を受け取るのではだめでしょうか。

# 管理者モードで
> Enable-PSRemoting

# 非ドメイン環境だと必要らしいのだが、よくわかっていない。*でも良いのだがIPアドレスを入れてみた
> set-item wsman:\localhost\Client\TrustedHosts -Value 127.0.0.1
> set-item wsman:\localhost\Client\TrustedHosts -Value 192.168.11.2

# PC1台のため、ループバック
> $Session = New-PSSession -ComputerName .

# 何となく.netのライブラリを使ってみる
> $test = { [void][Reflection.Assembly]::LoadFrom("C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Windows.Forms.dll")
>> $State=[Windows.Forms.PowerState]"Suspend"
>> [Windows.Forms.Application]::SetSuspendState($State,$False,$False) }

# -AsJobでリモートジョブにしてみる
> Invoke-Command -Session $session -ScriptBlock $test -AsJob

# 画面が真っ暗で電源ボタンが点滅だが・・・スリープなのかな?
# 電源オン

> Get-Job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 Job2 RemoteJob Running True localhost ...

# 結果受け取り
> Receive-Job -Id 2
True
109名無し~3.EXE:2013/09/16(月) 22:18:20.46 ID:CdMzda7A
>>108
確かにAsJobスイッチ付ければエラーは出ませんでした。
Invoke-Commandした後にRemove-Jobできれいに終了したことになるんですかねぇ。

なんにせよ、とても丁寧なレスありがとうございました。
110名無し~3.EXE:2013/09/17(火) 00:04:57.19 ID:hxIpcmJZ
>>109
(訂正)
[void][Reflection.Assembly]::LoadFrom("C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Windows.Forms.dll")

$dllpath = @(gci (join-path ${env:\windir} "Microsoft.NET\Framework") System.Windows.Forms.dll -recurse | sort -descending fullname)[0].fullname
[void][Reflection.Assembly]::LoadFrom($dllpath)
とかした方がいいですね。

それはともかく、ちゃんとJob内の処理が終わったかどうか判断しないとRemove-Jobするのはまずいので、

クライアントがスリープ後JobのStateがRunningじゃなくなるのなら、
Get-Job | % {Receive-Job -Id $_.Id -Wait -AutoRemoveJob}

Runningのままだったら、エラーメッセージの受け取りを完了とみなして、
Get-Job | % {if ((Receive-Job -Id $_.Id -Keep) -ne $Null) {Remove-Job -Id $_.Id}}
を何回か時間をあけて繰り返すかでしょうか。

上の方はループしそうな感じですが。。。

では。
111名無し~3.EXE:2013/09/17(火) 06:35:49.25 ID:79qHk4ME
vbaから自身のexcel.applicationインスタンスを引数にしてps呼び出ししたいのだけどなにかいいやり方はないかな?
112名無し~3.EXE:2013/09/17(火) 12:54:09.98 ID:Yc1wWTqs
VBAからCOMオブジェクトとしてExcel操作するPSスクリプト呼び出すんじゃだめなの?
113名無し~3.EXE:2013/09/22(日) 07:11:45.92 ID:FE/Txn3R
V3がインストールできません(T_T)
x86win7で.NET4もインストールしたのに…
114名無し~3.EXE:2013/09/22(日) 22:35:11.50 ID:MXZEqMQy
SP1入れてないとか?
115名無し~3.EXE:2013/09/23(月) 06:54:08.94 ID:tUguWng6
4.5入れたらインストール出来ました
116名無し~3.EXE:2013/10/07(月) 17:36:10.02 ID:do+XqACU
Powershell2.0でのCSVファイルの読み込みで質問です。
例えば、↓のような構成のCSVを読もうとしたとき

#あ行
あいうえお
#か行
かきくけこ
#さ行
さしすせそ

以下のように読み込んだところ、なぜか1行目を取得できませんでした。

$header = "ひらがな"
$Hiragana_List = Get-Content "C:\test.csv" | ConvertFrom-CSV -header $header

確認したところ、先頭行も「#」を削除すると読み込まれるようになりました。
ConvertFrom-CSVのヘルプなど参照しましたが、この現象について説明している部分は見受けられませんでした。
当現象について説明されているドキュメントまたはサイトをご存知の方がいましたら
ご教示願います。
117名無し~3.EXE:2013/10/07(月) 17:39:47.55 ID:do+XqACU
すみません。CSV コメント行 で検索したらいっぱい出ました。スレ汚し失礼しました
118名無し~3.EXE:2013/10/08(火) 11:34:29.70 ID:UAolPLty
wshでのbatとしての起動で先頭に下みたいなん書いといたら出来るのあるでしょ。
@if(0)==(0) ECHO OFF
CScript.exe //NoLogo //E:JScript "%~f0" %*
GOTO :EOF
@end

これみたいなんをpowershellでも出来る?
ようは1ファイルで収めたいのです。起動用バッチとps1ファイルと2個にしたくない。
119名無し~3.EXE:2013/10/08(火) 13:01:17.06 ID:PLvoVCxo
まずなんでbatからps1開くなんて頭悪いことしたいのかわかんないけどできるよ
120名無し~3.EXE:2013/10/09(水) 06:10:45.47 ID:55JWwc0D
>>119
ダブルクリックで実行したいのよ。
作ったのを配布するでしょ。配布された人がダブルクリックで実行出来れば簡単かなって。
やり方を教えてください。
121名無し~3.EXE:2013/10/09(水) 06:55:48.55 ID:svFRd2XV
何もしなくてもダブルクリックから動くだろ
122名無し~3.EXE:2013/10/09(水) 07:30:23.62 ID:55JWwc0D
>>121
デフォだとpolicy変更しないと動かないんじゃ?
123名無し~3.EXE:2013/10/09(水) 07:35:31.33 ID:rLepDMdE
動くよ
124名無し~3.EXE:2013/10/09(水) 08:33:44.01 ID:55JWwc0D
メモ帳で開いたけど…
125名無し~3.EXE:2013/10/09(水) 12:39:02.64 ID:ceeInWHW
>>120
そんなことならbatに記述するよりPowerGUIでexeコンパイルしたほうが楽
ポリシー設定気にしないで済むしモジュールも入れちまえばあれこれ気にしないで済む
126名無し~3.EXE:2013/10/09(水) 17:06:37.29 ID:55JWwc0D
>>125
こんなのもあるのかありがとう!!
一応こんなんでやりたいことは出来たから書いとくね。
hoge.cmd とかで保存してダブルクリックで実行。


@if(0)==(0) ECHO OFF
pushd "%~dp0" > nul
for /f "usebackq skip=10 delims=" %%i in ("%~f0") do @echo %%i >> "%~n0.ps1"
powershell -NoProfile -ExecutionPolicy unrestricted -File "%~n0.ps1" %*
del "%~n0.ps1"
popd > nul
pause
GOTO :EOF
@end

# この下にpowershell書く
gci
127名無し~3.EXE:2013/10/16(水) 22:45:15.78 ID:Ulm1Ns5o
powershell.exe -File test.ps1
と実行した時に、スクリプト内で発生したエラーは
標準エラー出力に吐かれます?
128名無し~3.EXE:2013/10/17(木) 12:44:58.16 ID:V6ZyvyAn
別のプロセスが実行してるのでもちろん入らない
129名無し~3.EXE:2013/10/17(木) 14:19:03.36 ID:cFqpFriz
僕は入ってますかね
130名無し~3.EXE:2013/10/25(金) 12:28:48.08 ID:QQz6e4Nf
Windows Management Framework 4.0
http://www.microsoft.com/ja-jp/download/details.aspx?id=40855

Windows PowerShell 4.0きたぞ
131名無し~3.EXE:2013/10/25(金) 21:55:44.34 ID:9Gmmube+
来たか
132名無し~3.EXE:2013/10/26(土) 09:01:44.41 ID:L9VVuVDO
違いは?
133名無し~3.EXE:2013/10/26(土) 23:13:26.38 ID:s6q5k+nY
配下に何階層ものフォルダ構造を持つ巨大フォルダ(例えば「C:\hoge」)があるとします。
この「C:\hoge」を指定してその配下の全フォルダのそれぞれのサイズを表示するコマンドって
PowerShellなら簡単に実現できるものなのでしょうか?
134名無し~3.EXE:2013/10/27(日) 01:32:52.86 ID:vVqnEPha
2秒で書けるよ
135名無しさん@お腹いっぱい。:2013/10/27(日) 07:40:01.27 ID:s+NRWeYZ
質問!
PowerShell2.0使っています。
文字列hogeの前後にSとEを付け加える処理を正規表現で行うと結果がおかしくなります。
バグなのでしょうか?なぜこのような結果になるか教えてください

>[regex]::replace("hoge", "(.*)", "S`$1E")
ShogeESE
136名無し~3.EXE:2013/10/27(日) 09:32:57.04 ID:ug06eM/8
"^(.*)$" ですな
137名無し~3.EXE:2013/10/27(日) 10:18:28.79 ID:MLMJJsd3
何故そうなるのかはわかりません
マイクロソフトにお問い合わせ下さい
138名無しさん@お腹いっぱい。:2013/10/27(日) 15:31:50.50 ID:s+NRWeYZ
回答ありがとうございます
Pythonでも試してみましたが、期待通りの結果になります
>>> import re
>>> re.sub(r"(.*)", r"S\1E", "hoge")
'ShogeE'

バグだろうという回答も無いので、みなさんがお使いであろうPowerShell3.0でも
同様の結果なのだと推察します。>>136さんの書き方でやっていこうと思います。
ありがとうございました。
139名無し~3.EXE:2013/10/28(月) 22:46:43.77 ID:Gf04lQjy
>>135のうちのV2でもなる
置換した戻り値でもう一回正規表現判定してるってことかね変なの

てか.Netよく分からないんだけど$1の前に`付いてるのってこういう文法なの?
ヘルプとか見つからないんだけどどこ行けば見られますか?
140名無しさん@お腹いっぱい。:2013/10/29(火) 00:44:28.68 ID:8GplZqvq
>>139
`はPowerShellのエスケープ文字
ダブルクォーテーションで囲まれた文字列は変換されてから渡されるので
"$1"だと未定義の変数$1の中身の空文字に置き換えられてしまうので、変換されないようにエスケープする
もしくはシングルクォーテーションで囲めば変換されない

ヘルプはPowerShellで>get-help about_regular_expression を実行するか、以下のページ参照
http://msdn.microsoft.com/library/az24scfc.aspx
141名無し~3.EXE:2013/10/29(火) 01:23:51.92 ID:Kykjayh7
Windows PowerShell の About ヘルプ トピック
http://technet.microsoft.com/ja-jp/library/dd347616.aspx
Windows PowerShell Cmdlet のヘルプ トピック
http://technet.microsoft.com/ja-jp/library/dd347701.aspx
142名無し~3.EXE:2013/10/29(火) 02:35:58.90 ID:BycwwpMO
>>140,141
うわあありがとう
>>140の.netの方は辿り付けたんだけどこれ自力じゃ絶対気付けなかったわ
正規表現とPSでエスケープが違うってことなのか…
>>140の詳しい説明見てようやく理解できました。詳しくありがとう
143名無し~3.EXE:2013/10/29(火) 13:04:35.07 ID:7QRwt9tz
わたしてんのはあくまで「正規表現の文字列」だからな
その文字列を生成するPSと正規表現でエスケープは違って当然

インラインでC#書いたりVBS書いてWSHに渡すとか.batにオプションつけて呼び出すとか
するときも当然渡す相手の文法で渡してやらないといけない
144名無し~3.EXE:2013/10/29(火) 13:23:58.90 ID:J1xX4qsZ
$DataGridView1.add_SelectionChanged({})
$DataGridView1.add_RowsRemoved({})

ってふうに持ってるイベントに.add_つければなんでもいいみたいだな
Register-ObjectEvent
でドツボにはまったから助かった
145名無し~3.EXE:2013/10/29(火) 18:54:03.16 ID:Di5Z66dq
アンダーバーはダサいからAdd-***Eventってラッパーを自動生成するように仕込んでる
146名無し~3.EXE:2013/10/30(水) 12:40:29.40 ID:BtK4CwYT
しかしなんで「発見」せなあかんのや?
DataGridViewの仕様なんてわざとややこしくしてると思われてもしゃーない
147名無し~3.EXE:2013/11/02(土) 11:55:09.42 ID:u5h4Fp7t
ややこしく、というより手抜きだな
クリップボードなんかみてるとそう思う
148名無し~3.EXE:2013/11/14(木) 17:18:59.77 ID:WT65Vhn3
秀丸で書いて秀丸からps1を実行したいんだけど、PowerShellウインドウ出ない(hiddenでプロセスが残らない)方法あるかなぁ
149名無し~3.EXE:2013/11/15(金) 22:54:21.96 ID:le3SjAxp
もっとスマートにしたいところ

function Open-Explorer($dir)
{
$p1 = New-Object Diagnostics.Process
$p1.StartInfo.FileName = "explorer.exe"
$p1.StartInfo.Arguments = "/e,"+$dir
$p1.StartInfo.WindowStyle = [Diagnostics.ProcessWindowStyle]::Normal
if($p1.Start())
{
$p1.PriorityClass = [Diagnostics.ProcessPriorityClass]::Normal
}
}
150名無し~3.EXE:2013/11/18(月) 21:32:08.51 ID:bs4Z+7cB
業務で英語版Windows 8.1(PowerShell 4.0)を使用していますが、
PowerShellでUTF-8の日本語が文字化けしてしまうので相談させていただきます
文字コードに関しては $OutputEncoding = [System.Text.Encoding]::GetEncoding("UTF-8"); で変更できましたが、
フォントを英語専用フォントから日本語対応フォントに変更することが出来ずに日本語の文字が表示できていません

【既に試した方法その1】
> $psise.Options.FontName = 'ms gothic'

↓実行結果
> The property 'FontName' cannot be found on this object. Verify that the property exists and can be set.
> At line:1 char:1
> + $psise.Options.FontName = 'ms gothic'
> + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> + CategoryInfo : InvalidOperation: (:) [], RuntimeException
> + FullyQualifiedErrorId : PropertyNotFound

【既に試した方法その2】
HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont の値を変更する
参考:http://dusan.kuzmanovic.net/2012/05/02/powershell-adding-more-fonts/
http://www.fine-view.com/jp/zatsugi/editor_console.html
→いずれも失敗

【備考】
システムロケールを日本語(Shift-JIS)に変更すると、
http://opcdiary.net/wp-content/uploads/2012/10/SnapCrab__2012-10-26_22-2-13_No-00_thumb.png
PowerShellやcmd.exeの起動時のフォントがMS ゴシックに変更され、
Shift-JISの日本語を表示することはできるようにました。しかしUTF-8は文字化けして表示できません

この状態で
$OutputEncoding = [System.Text.Encoding]::GetEncoding("UTF-8");
を実行して文字コードが変更されたことを確認してUTF-8の文字列を表示させましたが、
「UTF-8の文字をShift-JISとして解釈した場合に起きる文字化け」が起きてUTF-8の文字は表示できませんでした
151名無し~3.EXE:2013/11/19(火) 00:17:01.77 ID:4EOY2z1D
ファイル名処理で[]があると誤動作する問題は解決したのかな?
C#だと何の問題もなかった
152名無し~3.EXE:2013/11/19(火) 00:42:09.10 ID:uL0bXrl4
>>150
結果だけ確認できればいいならリダイレクト使え
リダイレクトなら文字コードの設定さえ合ってればフォントがおかしくてもきちんと出力できる
153名無し~3.EXE:2013/11/19(火) 09:13:03.75 ID:5fj54QjN
起動時のフォントをMeiryo系に変えたらどうかなぁ
154名無し~3.EXE:2013/11/19(火) 22:37:20.47 ID:DA6WSiQr
基本chcp 65001でそれなりに動いた気がするけど
Ver4はしらね
155名無し~3.EXE:2013/11/24(日) 20:48:37.03 ID:sPTX9xyk
PowerShell >dir | clip.exe

は文字化けするね
156名無し~3.EXE:2013/11/24(日) 21:54:38.02 ID:sPTX9xyk
これで直った。
1日半かかった。

PS C:\> $OutputEncoding = [console]::OutputEncoding;
PS C:\> $OutputEncoding.EncodingName
日本語(シフト JIS)
157名無し~3.EXE:2013/11/26(火) 14:11:49.45 ID:7IVhCosx
エスケープ文字に ` 使ったり \ 使ったり、PowerShellって破綻してんじゃねーの
158名無し~3.EXE:2013/11/27(水) 12:46:09.79 ID:IY73nG9s
一連のレス読んでそう思うなら破たんしてるのはお前の脳だ
159名無し~3.EXE:2013/11/27(水) 14:06:30.94 ID:DvX5p09K
レスやら他のブログ見てても「発見」の多いこと多いこと
>>158がSystem.Management.AutomationあたりとPowerShellの仕様の兼ね合いを理解出来るんなら、破綻してるのは俺の脳だけどな
新しく増えたcmdletもいちいち調べなきゃならんし
160名無し~3.EXE:2013/11/27(水) 23:45:54.88 ID:u2kSCqlk
まー他の言語のクセからくる先入観みたいなのがあるとはまることは多いかもねぇ
シェルの領域で使う分にはヘルプで十分事足りるよ
161名無し~3.EXE:2013/11/28(木) 18:13:53.27 ID:+/TyrDFu
シェルスクリプトの代用はC#だけで十分事足りる
それほどC#の統合環境下でのデバッグはやりやすいし、書きやすい。
シェルスクリプトとしても考えられるほぼすべてがそろってる。
処理速度もシェルスクリプトあたりと比較にならないほど速い。
PSにあるのは一行コマンドとしての存在価値だけだな。
.netの下でしか動かないし、どーしたもんかな?
162名無し~3.EXE:2013/11/28(木) 18:16:31.89 ID:+/TyrDFu
PSが.netから解放されて、メンテとか、システム修復とかに使えて
DOSコマンドを置き換えるものなら意味あるんだけどな
163名無し~3.EXE:2013/12/02(月) 14:30:06.77 ID:Cb1xSis3
く、苦じぃーw

#全角数字を半角に置換
function ZenNumToNarrow($text)
{
$MatchEvaluator =
{
param($m)
$x =[Microsoft.VisualBasic.Strings]::StrConv($m.Value, $to_narrow);
return $x;
}
$rx = new System.Text.RegularExpressions.Regex("[0-9]+");
return $rx.Replace($text, $MatchEvaluator) ;
}
164名無し~3.EXE:2013/12/02(月) 23:21:46.81 ID:zOwIGjBa
自分で書くならこうかなー
$m = { [Microsoft.VisualBasic.Strings]::StrConv($args[0].Value, "Narrow") }
[regex]::Replace("0123456789", "[0-9]+", $m)
165名無し~3.EXE:2013/12/03(火) 18:13:31.20 ID:XsL/V9z4
置換の$MatchEvaluatorみたいなのはjavascript(?)だったら、関数内関数みたいなので簡単にできなかったかなぁ
166名無し~3.EXE:2013/12/26(木) 12:37:21.59 ID:pHuthdxL
PSを使ってドコモメールの送信しようとするとしてますが、成功された方いらっしゃいますか?
167名無し~3.EXE:2013/12/26(木) 18:23:37.90 ID:sQsdGx2X
function global:Zen2HanForFile($source){
$diff = ([int[]]'!'.tochararray())[0] -([int[]]'!'.tochararray())[0]

$tgtarray = [int[]]$source.ToCharArray();
$match = [regex] "[a-zA-Z0-9!@#$%^&()−_+=`{};,.]"
for($i = 0; $i -lt $tgtarray.length; $i++){
$tmp = $match.Match($source, $i, 1);
if($tmp.success ){
$tgtarray[$i] -= $diff;
}
}
}
168名無し~3.EXE:2013/12/26(木) 18:33:38.41 ID:sQsdGx2X
C#で書いてもあんま変わらん

static readonly Regex MatchZen = new Regex(@"[a-zA-Z0-9!@#$%^&()−_+=`{};,.]");
const char DiffZen2Han = (char)('!'-'!');

public string
Zen2Han(string source) {
char[] tgtarray = source.ToCharArray();
for (int i = 0; i < tgtarray.Length; i++) {
Match tmp = MatchZen.Match(source, i, 1);
if (tmp.Success) {
tgtarray[i] -= DiffZen2Han;
}
}
}
169名無し~3.EXE:2013/12/27(金) 17:44:19.41 ID:ExYlIqRc
scriptcs - Write C# scripts in your favorite text editor
scriptcs.net/
170名無し~3.EXE:2013/12/27(金) 18:02:04.54 ID:MVxNgGF7
.netの豊富なライブラリをコールするだけなんだからC#もPowerShellも変わらんよな
C#のプログラムなんてほとんどライブラリコールで終わる
171名無し~3.EXE:2013/12/30(月) 22:24:09.50 ID:a/2VaF2t
>>158
一連のレス読んだらどう見ても終わってるだろ
172名無し~3.EXE:2013/12/31(火) 00:09:30.26 ID:UWAP894n
一ヶ月も前の話題を振り返す池沼
173名無し~3.EXE:2013/12/31(火) 02:46:25.85 ID:3i7Jf7wN
>>172
必要があるから振り返したんだよ池沼
お前はなんも考えもなしで食いつく池沼
こんなのがいついてるから普及しないんだよ気づけ
174名無し~3.EXE:2013/12/31(火) 02:46:58.18 ID:3i7Jf7wN
>>172
おいクズ
内容で否定してみろ
一連のレス読んだらどう見ても終わってるだろ
175名無し~3.EXE:2013/12/31(火) 02:48:34.44 ID:3i7Jf7wN
>>172
振り返すも何も他の仲間いねえじゃねえかおら
上げてやって感謝しろよ池沼
話題もふれないクズのくせに
からんでくんなバカ
176名無し~3.EXE:2013/12/31(火) 02:50:45.58 ID:3i7Jf7wN
>>172
こっちは喧嘩売りに来てるんだよバカタレが
相手みてレスしろ
迷惑だからお前
177名無し~3.EXE:2013/12/31(火) 03:00:26.71 ID:3i7Jf7wN
一連のレス読んだらどう見ても終わってるわ
バカが一人で自分はいいこと書いてるとでも思ってんだろ
くっさくっさ
178名無し~3.EXE:2014/01/07(火) 12:28:13.96 ID:Zygy79X1
1レスで済むところを連投お疲れ様です
179名無し~3.EXE:2014/01/10(金) 19:41:32.09 ID:SeEuVyyV
履歴の保存の方法見たけど
http://qiita.com/cd01/items/1f4a380234ef9ea86d73
みたいにプロンプトに仕込むのはかっこ悪くて気がのらない
終了イベントをトリガーできるとスマートにできるんだけどな
180名無し~3.EXE:2014/01/10(金) 20:04:40.26 ID:kZH1Yfpx
Register-EngineEventでPowerShell.Exitingをサブスクライブすれば
181名無し~3.EXE:2014/01/14(火) 11:32:53.68 ID:Hc25CGps
Windows 7だけど、OS起動時にGUIの代わりにPowerShellを立ち上げる方法はありますか?
182名無し~3.EXE:2014/01/15(水) 10:48:42.06 ID:+33L3f5i
「GUIの代わりに」の意味がよく分かりませんが。。。

普通にスタートアップに下記のようなショートカットを入れておけばいいのでは
C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe -NoExit -command C:\hogehoge\init.ps1
183名無し~3.EXE:2014/01/15(水) 10:58:18.45 ID:OLqa5BN9
unix で X いれてないときみたいにいきなりログインシェルが powershell になってるようなのを期待してるんじゃない?
184名無し~3.EXE:2014/01/15(水) 12:52:10.88 ID:djBEmZFb
サーバーならGUIなしにできるがクライアントでは無理なのでは…
185名無し~3.EXE:2014/01/15(水) 14:03:46.05 ID:5RnizdEM
>>183
そうそうそんな感じ。
PowerShellからwin<enter>とするとGUIが立ち上がったりとか。
186名無し~3.EXE:2014/01/15(水) 14:27:35.28 ID:OLqa5BN9
正攻法では無理じゃない?
>>184 の言うとおりサーバだと公式な手順で powershell で起動するように設定できるようだけど。

適当にぐぐると実行ファイル書き換えるバックドドアみたいなのばっかりでてくる。
187名無し~3.EXE:2014/01/15(水) 15:08:48.20 ID:fZcvpa0v
powershellってドットネットで動くと思うけどGUIなしとかできるのか。
188名無し~3.EXE:2014/01/15(水) 15:39:05.22 ID:OLqa5BN9
コンソール版も内包してるんでしょう。
cmd 上で powershell 起動すると自前のターミナルではなく cmd のを使ってるし。
189名無し~3.EXE:2014/01/18(土) 14:38:17.21 ID:KleAGlFQ
SQLite3を入れてPowerShellのウィンドウ内で操作しているんですが、
日本語が文字化けしてしまうんです。

Linuxのほうのシェル(Bash)では文字化けしないのですが・・・
190189:2014/01/18(土) 19:53:34.05 ID:KleAGlFQ
>>189 とりあえず自己レスです。

PowerShell上で
>Get-Content -Encoding UTF8 ファイル名.txt

とすると文字化けせずに読み込んでくれることが分かりましたが、
sqlite3のプロンプト内ではどうやったらいいのかわかりません。

>sqlite3
sqlite>.open データベースファイル名.db
sqlite>.tables
Japanese words
sqlite>select * from 'Japanese words';
だとやはり日本語データが文字化けして表示されてしまいます。

powershellの問題ではなくsqlite3の問題なのかな。
191名無し~3.EXE:2014/01/18(土) 21:25:43.89 ID:FtnKyzhJ
powershell は UTF8 での出力を表示出来ないからじゃないかね。
sqlite のシェルは出力を UTF8 で出す作りになってるからどうにもならんような。

$OutputEncoding とか [Console]::OutputEncoding/InputEncoding、
$Host::CurrentCulture あたりを弄るとか
chcp 65001 とか色々やってたら powershell 側でうまくいくかもしれんね。
192名無し~3.EXE:2014/01/18(土) 22:02:34.66 ID:8YPIu0zq
[Console]::OutputEncoding=[Text.Encoding]::UTF8 にすればうまくいきそうな気もするが、
終わった後は

[Console]::OutputEncoding=[Text.Encoding]::Default

に戻さないといけないので注意。
193名無し~3.EXE:2014/01/19(日) 08:48:16.80 ID:fBuIPN40
PSConsoleHostReadLineがあればUTF-8のまともな入出力に対応できる
そう思っていた時期が俺にもありました。
また挑戦してみようかなぁ・・・

いや今回の話には関係ないんだけど
194名無し~3.EXE:2014/01/19(日) 08:53:29.78 ID:IsgtQuLO
究極的にはホストプログラム書いちゃうのがいいのかもしれん

>>192
うちはそれやってから utf8 なテキストファイルを type すると powershell 自体が死んだ
195名無し~3.EXE:2014/01/19(日) 15:20:31.89 ID:PwvsMfCU
>>181
Set-ItemProperty "HKCU:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" Shell -Value powershell.exe
196名無し~3.EXE:2014/01/27(月) 23:38:50.74 ID:WWOYfxWI
PS C:\> Get-ChildItem env:Path

Name Value
---- -----
Path %SystemRoot%\system32\WindowsPowerShell\v1.0\;C:\Ruby200\bin;C:\Windows\system32;C:\W...


...じゃ分かんねーよ
197名無し~3.EXE:2014/01/27(月) 23:45:58.10 ID:WWOYfxWI
echo $env.Path

$env:Path.split(";")
198名無し~3.EXE:2014/01/27(月) 23:55:14.41 ID:bNQOo3Rb
そりゃー、Get-ChildItemは中身を見るために使うコマンドじゃないからな
ls *.txt
でテキストファイルの中身全表示されたら敵わんだろ
Get-Content env:pathで同じ結果なら文句も出ようがね
199名無し~3.EXE:2014/01/28(火) 05:53:22.49 ID:EcEK/wM9
スマソ
覚え始めたばっかだった。

しかし、ls *.txtでファイル名が途中で切れたら困るんじゃ

とおもったらファイル名一覧の場合は折り返すんだね。謎
PS C:\xxx> ls

ディレクトリ: C:\xxx


Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2014/01/28 5:44 0 abaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaa

PS C:\xxx> ls |grep aba
-a--- 2014/01/28 5:44 0 abaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

だめだこりゃ
200名無し~3.EXE:2014/01/28(火) 08:21:24.40 ID:xsAlgx6F
多分君は cygwin いれたほうが捗るとおもうよ。
201名無し~3.EXE:2014/01/28(火) 12:33:07.93 ID:VK7hF+k1
|ftつけるだけのことができないやつが一番駄目だこりゃ
202名無し~3.EXE:2014/01/29(水) 04:27:50.08 ID:GsjexVYh
ls | ? name.indexOf("aba") -gt -1
ls | ? name -like "*aba*"
ls | ? name -match "aba"

grepってことは一番下あたりかなあ
203名無し~3.EXE:2014/01/29(水) 12:48:16.99 ID:T1G+p7cc
PowerShellコントローラってのがあるな
http://gaming.logicool.co.jp/ja-jp/product/powershell-controller-and-battery
204名無し~3.EXE:2014/01/29(水) 22:15:13.83 ID:UPS9G+/2
@(a-z) -> @("a", "b", "c", .... "z")
こんな感じの構文で一気に配列に落とし込めないのかな?
205199:2014/01/29(水) 23:54:47.74 ID:z7pC3zVp
これだと長いファイル名が切れなくなった。

PS> ls | % { echo $_.BaseName } | ? { $_ -match "aba" }
abaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
206名無し~3.EXE:2014/02/02(日) 01:12:44.60 ID:9TDhIV8j
とりあえずマウス位置のウィンドウをキャプチャするのを作ってみたんですが
大きく表示している Chrome とか デスクトップ とかしか拾ってくれません。
なんか 矩形の2番目にくる Top がいつも0になるんでポインタや構造体サイズ当たりが間違ってるのかなと思うんですけど
どこが間違っているんでしょうか。
32ビットウィンドウだけが見えると言うわけでもなさそうで。

$Win32APIs = Add-Type -Language CSharp -Namespace Win32APIs -Name Window -MemberDefinition @"

    public struct Rect{ public int left, top, right, bottom; }

    [DllImport("user32.dll", CallingConvention = CallingConvention.StdCall)]
    public static extern IntPtr WindowFromPoint(int x, int y);

    [ DllImport( "user32.dll" ) ]
    public static extern int GetWindowRect( IntPtr hwnd, out Rect lpRect );
"@

function GetWindowRectFromPoint ($Point) {
  $handle = [Win32APIs.Window]::WindowFromPoint([int]$Point.X, [int]$Point.Y)
  $rect = New-Object Win32APIs.Window+Rect
  $ret = [Win32APIs.Window]::GetWindowRect($handle, [ref]$rect)
  if ($ret) {
    return $rect
  }
}

$Point  = [System.Windows.Forms.Cursor]::Position
$Rect   = GetWindowRectFromPoint($Point)
$Bitmap  = New-Object System.Drawing.Bitmap -ArgumentList $( $Rect.right - $Rect.left ), $( $Rect.bottom - $Rect.top )
$graphics = [Drawing.Graphics]::FromImage($bitmap)
$graphics.CopyFromScreen( $Rect.left, $Rect.top, 0, 0, $bitmap.Size)
[System.Windows.Forms.Clipboard]::SetDataObject($bitmap)
207名無し~3.EXE:2014/02/02(日) 08:29:29.15 ID:9TDhIV8j
ぐぐってたら COM呼び出しするソフト見つけたけど過去ログではテンプレだったんだな。
ActiveXPosh ってやつ。

これを使わずに呼び出すには .net かコマンド実行しかないのか。

PowerShell - PowerShell ならバック グラウンド ジョブがあるのか。
Start-Job, Get-Job, Receive-Job
208206:2014/02/03(月) 08:53:22.96 ID:+cUyijOr
どうも WindowFromPoint が 64bit ではまともに動かないらしい。
ネットにいっぱいありました。

32ビット版の Powershell ISE を起動して
32ビット版の Powershell ISE のポリシーを設定したら動くようになった。

C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell_ise.exe
「管理者:Windows PowerShell ISE(x86)」
Set-ExecutionPolicy RemoteSigned

だけど取得できる対象ウィンドウがコントロールレベルだから予定と違うけど。


ttp://harikofu.blog.fc2.com/blog-entry-36.html
ttp://blog.ccm-lulu.com/2013/02/windows-7-64bit-jenkins-powershell.html
ttp://pieceofnostalgy.blogspot.jp/2011/11/net-framework.html
ttp://codename2010.blog11.fc2.com/blog-entry-125.html


SysWOW64のDLLを指定する方法があるけど動くかどうかは
ttp://cflat-inc.hatenablog.com/entry/20130723/1374535605
209名無し~3.EXE:2014/02/03(月) 17:11:04.71 ID:kN3IO5kY
プログラム板にもpowershellスレあるから
人がいないんじゃなくて桃白白にからんでたお前が臭いだけ
210名無し~3.EXE:2014/02/03(月) 19:48:09.97 ID:TjI62Mr5
>>206
あのさ、
そーゆーの無理してシェルスクリプトでつくるよりC#使えばいーんでねーの?
Windows自体の機能はC#で書くに限るように思うんだが。
211名無し~3.EXE:2014/02/03(月) 20:22:14.85 ID:gnOoaorg
コマンドレット化するとかならともかくベタに書くだけなら素直に VS で書いたほうが早いわな。
212名無し~3.EXE:2014/02/03(月) 23:18:08.60 ID:+cUyijOr
>>210-211
スクリプトでやりたいんですよ。
開発環境入れたくないんですだよ。

UWSC や AutoIt や AutoHotKey を使わずにやれるならやりたい。

この手のソフトは操縦系を簡単に組めるようになってるけど
一旦テンプレが出来れば .net でも簡単に出来るわけで。

出来なくても連携部分がどこまで連携できるかなとか。

本当は機能ごとに連携パターンをそれぞれ作る予定だったのに
まさか一つもできないなんて。


.net プログラミングが出来るなら System.Management.Automation を .net から呼び出すのがよさげだけど
System.Management.Automation を .net 以外から呼び出せないかなあとか。
213名無し~3.EXE:2014/02/03(月) 23:32:41.86 ID:+cUyijOr
ところで、C#のソース部分でいきなり using System; とかやるとエラーになるんですが
どうしたらいいんでしょう。

> 無効なトークン 'using' が クラス、構造体またはインターフェイスのメンバー宣言で使用されています。

>>38 のを試したらエラー出なかった。



構造体またはインターフェイスのメンバーだからダメなのか。
それで型が変なことになってたのか。
よく分からん。
214名無し~3.EXE:2014/02/03(月) 23:45:35.15 ID:gnOoaorg
ちゃんと Add-Type の説明よんだらいいよ。
-MemberDefinition はあくまでメンバの定義で外側を class なんちゃら {} でくくられてるって考えたらいい。
ネームスペース追加したいなら -UsingNamespace

using からクラス名からなにから全部コード中に書きたいなら -TypeDefinition か無指定。
ほぼ C# のコードそのままになる。

Add-Type の注意は、例えクラス定義しても他の Add-Type の中からはそのままじゃ見えないって所。
一度アセンブリを書き出して -ReferenceAssemblies しないと using しても見つからない。
オンメモリで Add-Type をまたぐのは無理らしい。

ちなみに、-OutputType と -OutputAssembly を指定すれば実行ファイルも作れたりするぞ。
215名無し~3.EXE:2014/02/03(月) 23:59:50.63 ID:+cUyijOr
>>214
早速ありがとうございます。
そこらへんいろいろパターンがあったけど意味が分からず適当にやってました。
もうちょっと勉強します。
216名無し~3.EXE:2014/02/08(土) 15:36:49.30 ID:qPrUVIRX
surface pro2(Windows8.1)のコマンドプロンプト(管理者で実行)で
netshコマンドでIPアドレスを変更しようとしたところ、要素が見つかりませんと
エラーが出たのですが、powershellにこのコマンド移行されたと考えたよろしいでしょうか?
ネット検索していたらそのような事が書かれていたので・・・
ただnetshコマンドでIPアドレスを変更するバッチを作りたかったのですが、
同じようなことをpowershellでできればやりたいのですが、ご教授ください。
217名無し~3.EXE:2014/02/09(日) 12:08:09.51 ID:yVAgs4Le
ご教授なんかいたしません
218名無し~3.EXE:2014/02/10(月) 15:44:38.07 ID:P/wuRJiG
219名無し~3.EXE:2014/02/11(火) 00:34:50.24 ID:6G4rTE/1
えtst
220名無し~3.EXE:2014/02/11(火) 00:39:18.39 ID:CpUAARdy
てst
221名無し~3.EXE:2014/02/11(火) 12:19:00.86 ID:BahIcKTf
Linuxのシェルではsuやsudoというコマンドで一般ユーザから管理者になれるんですけど、
Powershellでも同様なことができるんでしょうか?
222名無し~3.EXE:2014/02/11(火) 14:59:21.02 ID:O5l3+A2G
大雑把な聞き方で申し訳ないんだけど
環境変数にある「lib」ってPowershellで使ってるの?
この変数って何の場所を示してるの?
223名無し~3.EXE:2014/02/11(火) 17:30:16.92 ID:Npu17lB/
VisualC++のライブラリパスじゃないか?
224名無し~3.EXE:2014/02/12(水) 12:32:39.80 ID:3JsPOFW+
>>221
引数に-Credential 管理者
225名無し~3.EXE:2014/02/22(土) 09:45:36.98 ID:GPm6WR7L
>>224
それだと実現したいことができませんでした。
Windowsにはsuやsudoに当たるコマンドプログラムはないんでしょうかね。

ところでPowerShellの起動時のウィンドウ枠の大きさは設定できません。
設定をずっと有効にするためには、Linuxみたいにどこかの設定ファイルを
書き換える必要があるのでしょうか。
226名無し~3.EXE:2014/02/22(土) 21:18:21.90 ID:is2t6Se8
>>225
・外に窓を開いていいのなら
Start-Process "$psHome\powershell.exe" -ArgumentList "-noexit" -Verb Runas

・タイトルバーを右クリックしてプロパティ | レイアウト | ウィンドウのサイズ
227名無し~3.EXE:2014/02/22(土) 21:50:27.91 ID:is2t6Se8
>>225
下の方
キーバインドのことを考えるとckw-modの子プロセスとしてPowerShellを起動した方がいいかもしれない。
http://ckw-mod.github.io/
https://github.com/ckw-mod/ckw-mod/wiki
228名無し~3.EXE:2014/02/27(木) 01:22:46.28 ID:QnagUHOL
ISEで日本語を含んだオブジェクトをテーブル表示したらずれるんだけど何か対処法ない?
コンソール版だと問題ないんだけど

#例
$hash = @{}
$hash["long long ascii string"] = 123
$hash["テーブルで日本語を使うと"] = 123
$hash | ft -AutoSize
229名無し~3.EXE:2014/02/27(木) 10:36:50.04 ID:0zoH8YGE
なんか文字幅無視した処理になってるみたいだね。
ConsoleHost はそこら辺考慮してくれるけど ISE Host はまる無視なのか
230名無し~3.EXE:2014/02/28(金) 21:24:54.82 ID:BKmsPwhf
Win2008ServerのPowershell使ってます。
サーバにすでに適用済みのセキュリティパッチ一覧を取得する方法は
ネットにもサンプルがたくさんあるのでわかります。
そでなく、サーバにダウンロードされ(パッチ自体はまだインストール
していない)Windows Updateに表示されたセキュリティパッチの一覧
のみを、テキストファイルで出力したいニーズがあるのですが、
ご存知の方教えてください。ヒントになるサンプルがあるリンク先が
あればご紹介ください。
よろしくお願いします
231名無し~3.EXE:2014/02/28(金) 21:59:19.69 ID:VRggz1UA
何やりたいのか分からないが、Linuxのsudoに相当するのは、Windowsではrunas
ただし、Linuxみたくセキュリティが理由で実行ユーザーを分けたいのなら、Windowsはロール単位で分けた方かいいと思う
232名無し~3.EXE:2014/03/08(土) 17:31:02.25 ID:4SI95pD9
powershellでwget的なこと(httpプロトコルを使用して、htmlファイルを取得したい)をしたくトライしてるのですが、管理者権限がなくps1ファイルが実行ポリシー上制限されていて悩んでます。権限がなくても上記要望を満たせる方法ってないんでしょうか。
233名無し~3.EXE:2014/03/08(土) 21:57:58.55 ID:f+vb4h3U
ps1ファイルからの実行じゃなく、メモ帳で開いて
ISEにコピペしてそのまま実行だと行けない?
234名無し~3.EXE:2014/03/08(土) 23:08:45.42 ID:/+JEqmW+
Invoke-WebRequest url -Outfile ファイル名 (Invoke-WebRequestはiwrと略せる)

$wc=New-Object Net.WebClient
$wc.DownloadFile("url","ファイル名")

ファイルを落とすのはこんな感じで

でもSet-ExecutionPolicy RemoteSigned (管理者権限で) をしておかないと不便だと思う。
235名無し~3.EXE:2014/03/09(日) 00:06:13.19 ID:2SJ9bOP4
いっそのこと、wgetないしcurlを自分のディレクトリに入れてしまう。
実行が制限されていなければ、だが。
236名無し~3.EXE:2014/03/09(日) 00:12:07.25 ID:tDlmk9R3
あー、もうやっぱり実行権限エラーで-ExecutionPolicyオプションやや$env:PSExecutionPolicyPreferenceの存在を示さないのは犯罪レベルだな・・・
237名無し~3.EXE:2014/03/09(日) 10:20:34.59 ID:3TFYZ/uV
powershellの日本語ヘルプって作られてるの?
4.0では無いようだけど、3.0でもないの?
238名無し~3.EXE:2014/03/09(日) 10:46:17.01 ID:7HO/K4Fu
Windows 7 にもともと入ってる 2.0 は日本語ヘルプ使えるね
239名無し~3.EXE:2014/03/09(日) 11:43:32.12 ID:3TFYZ/uV
4.0にアップデートしちゃうと、2.0にあるコマンドの日本語ヘルプも見れなくなっちゃうのか。
240名無し~3.EXE:2014/03/09(日) 11:49:12.66 ID:78PqI9wk
共存できないの?
241名無し~3.EXE:2014/03/09(日) 19:09:05.59 ID:3TFYZ/uV
わからん
242名無し~3.EXE:2014/03/11(火) 11:24:43.76 ID:ZIEtzk92
PSスクリプトを複数の非ドメイン環境の端末に配布して実行させたいけど、
端末のexecution policyを変更しないとPowerShellスクリプトがそもそも実行できない。
こういう場所ってどうやって実行ポリシーを変更させるのが効率的ですかね?
243名無し~3.EXE:2014/03/12(水) 04:19:36.47 ID:tcO62GJs
効率的な方法はわからないですけど
どうせだったら必要な端末でEnable-PSRemoting (管理者)を実行して
リモートで処理したらいいんじゃないでしょうか

http://www.atmarkit.co.jp/ait/articles/1004/15/news106_3.html
http://blog.powershell-from.jp/?p=129
244名無し~3.EXE:2014/03/12(水) 08:56:19.61 ID:VBxeOQsH
>>243
ありがとうございます
参考にさせていただきます!
245名無し~3.EXE:2014/03/13(木) 13:12:36.91 ID:vxojom+K
誰か教えてください
[]を含む複数のファイルが同一フォルダーにあってそのリストを得たり名前を変更する方法
例 
test[01].txt, test[02].txt, test[03].txt, test[04].txt があり
Get-ChildItem '.\test`[01].txt' と入力したのですが該当なしになってしまい
Get-ChildItem '.\test`[01`].txt' はエラーとなってしまいました

正規表現のメタキャラである[を`でキャンセルしたつもりでしたがうまくいきません

よろしくお願いします
246名無し~3.EXE:2014/03/13(木) 13:33:30.62 ID:dJNjTHM+
>>245
'.\test``[01``].txt' でいけた。
エスケープ二段構えってことは2回パースされてるってことなんだろうな。
補完だと一回しかエスケープされないのな・・・
247名無し~3.EXE:2014/03/13(木) 14:04:59.14 ID:y3H8mSgE
gci -LiteralPath "test`[01`].txt"
248名無し~3.EXE:2014/03/13(木) 14:12:57.24 ID:y3H8mSgE
gci test`[*`].txt | % { ... }
的なことをやる場合、$_.name $_.fullname は [] をクォートする必要あり
249名無し~3.EXE:2014/03/13(木) 14:20:00.30 ID:vxojom+K
>>246 ありがとうございました、が
Get-ChildItem '.\test``[01``].txt' はうまくいきましたが

Rename-Item '.\test``[01``].txt' -NewName 'test01.txt' では
Rename-Item : 指定されたパス C:\TMP\test``[01``].txt のオブジェクトは存在しません。
とエラーになってしまいました

もうちょっと助けてください
250名無し~3.EXE:2014/03/13(木) 14:52:06.13 ID:dJNjTHM+
`でも``でもだめだねえ・・・
Get-ChildItem `.\test\\[01\\].txt' | Rename-Item -NewName 'test01.txt' でもだめだった。
251名無し~3.EXE:2014/03/13(木) 14:52:35.05 ID:vxojom+K
自己解決しました

Rename-Item -LiteralPath .\test[01].txt -NewName test01
で できました
Thanks
252名無し~3.EXE:2014/03/13(木) 14:54:42.46 ID:vxojom+K
251です
ところで-LiteralPathの意味教えてください
253名無し~3.EXE:2014/03/13(木) 14:55:59.17 ID:y3H8mSgE
大体こんな感じで処理してる

function escapebrackets([string]$string) {
return (([regex]"(?<!``)\]").Replace(([regex]"(?<!``)\[").Replace($string,"`["),"`]"))
}

gci | ? name -match "test`[(.*)`]\.txt" | % {rename-item -LiteralPath (escapebrackets $_.fullname) ("test{0}.txt" -f $matches.1)}
254名無し~3.EXE:2014/03/13(木) 15:02:39.70 ID:y3H8mSgE
>>252
パス内のワイルドカード(* ? [])を展開しないという意味です
255名無し~3.EXE:2014/03/17(月) 17:44:28.82 ID:8X4UzM90
245です
皆さんにいろいろ教えていただいたことを基にいろいろ試したのですがうまくできなかったので
教えてください

やりたいこと
フォルダー内に test[01].txt, test[02].txt, test[03].txt, test[04].txt があります
これらのファイル名を test[91].txt, test[92].txt, test[93].txt, test[94].txt にリネームする
パイプ処理を使って1行のコマンドで行う

よろしくお願いします
256名無し~3.EXE:2014/03/17(月) 21:52:29.03 ID:Kf3bF1Nc
Get-ChildItem -Filter "test[0*" -Recurse |Rename-Item -NewName{$_.name -replace "0","9"}
257名無し~3.EXE:2014/03/17(月) 22:33:27.65 ID:f/w+/KoJ
みなさんはパス打つとき(PowerShellに限らず、2chやTwitterなどでも)、

○○バックスラッシュ○○
○○\○
○○/○○
どれ派?
バックスラッシュを2chで打つと\になるのでカタカナです
258名無し~3.EXE:2014/03/17(月) 22:42:11.03 ID:qIu77JEL
/ が使えるようになってからは / 使う
やっぱり¥は見にくい。

あと、¥使ってるとLinux使ったときにバックスラッシュに違和感持ってしまう。

そう言えばLinuxでも / じゃなかったっけ。
259名無し~3.EXE:2014/03/18(火) 23:22:25.21 ID:dG3I/+Vr
実現の可否が分からなかったので、質問をさせて下さい。
2.0を使用しています。使用経験は浅いです。

以下のようなコードを使用し、csvファイルをpowershellで比較して、行番号の表示付きで差分を出そうとしています。
================
$content1 = Get-Content "〜.csv"
$content2 = Get-Content "〜.csv"

$comparedLines = Compare-Object $content1 $content2 | Group-Object { $_.InputObject.ReadCount } | Sort-Object Name
================

上記でもうまくいくのですが、csvファイルのサイズが大きい場合は処理が重くなるため、Get-Contentに-readcount xxxを指定して処理を速くしたいと考えています。

ただ、-readcount xxxを指定した場合、Get-Contentの結果が配列になるようで、後続のCompare-Objectの処理が意図した動きにならず、正しい結果が得られなくなりました。

アイデアが浮かばないのですが、-readcount xxxを指定し、かつ行番号の表示を付けて差分を出すことは可能なのでしょうか。
260名無し~3.EXE:2014/03/20(木) 00:46:04.83 ID:Z5Q1+4Li
>>259
よくわからんけど、これ参考になる?

$a=select-string ^ c:\a.csv | % { $_.Path=""; $_ }
$b=select-string ^ c:\b.csv | % { $_.Path=""; $_ }
diff $a $b
261259:2014/03/21(金) 22:55:24.54 ID:nolM2WlZ
>>260
レスありがとうございます。

明記していなかったのですが、今回は比較する際に同じ行番号の行だけで比較するだけでなく、違う行番号の行でも内容が一致していればOK、という処理もしたいと考えています。

記載いただいた方法だとdiff処理の前に番号を振っていることから、diffの際に「-syncwindow 0」にするのと同じことになり、同じ行番号の行だけで比較する場合にしか使えないと考えます。
262名無し~3.EXE:2014/03/23(日) 10:46:25.15 ID:YYHz+abV
>>259
-readcount付けなくてもGet-Contentは1行ごとの配列として読みだしてるよ
forなりdoなりでreadcountを指定して回せばいいんでね
そもそもcsvならimport-csvして主キーで検索して比較すりゃいいんでないの?
263名無し~3.EXE:2014/04/07(月) 16:51:17.09 ID:1jbvlQ1e
Windows Management Framework 5.0 Preview
http://www.microsoft.com/en-ph/download/details.aspx?id=42316
264名無し~3.EXE:2014/04/07(月) 17:16:30.41 ID:7xoKEkCJ
乙です
8.1以降なんですな
update 1のあとに入れて見ようかな
265名無し~3.EXE:2014/04/07(月) 20:10:24.00 ID:xgjcpi9O
なぜにフィリピン
266名無し~3.EXE:2014/04/08(火) 22:33:30.31 ID:ziSbYawI
XPが今日でご臨終だから、いよいよPowerShellがデフォで入ってるOSだけになったね。
267名無し~3.EXE:2014/04/08(火) 23:05:44.96 ID:/G3cR45b
XPはこれからだ
268名無し~3.EXE:2014/04/11(金) 23:06:49.23 ID:/l5Sv7rX
http://toro.2ch.net/test/read.cgi/win/1397118718/143-146 をPowerShellでやってみた
管理者でPowerShellを起動して実行、パスは自分の環境に合わせて修正要

# イメージファイルのマウント先
$mountpoint="F:\mount"

# イメージファイル
# $image="C:\ESD\Windows\sources\install.wim" # RTM ver.
$image="C:\ESD\Windows\sources\boot.wim" # download ver.

# Windows 8.1 Update 1(KB2919355) の保存先
# 32bit http://www.microsoft.com/ja-jp/download/details.aspx?id=42327 から事前に保存しておく
# 64bit http://www.microsoft.com/ja-jp/download/details.aspx?id=42335 から事前に保存しておく
# http://www.microsoft.com/ja-jp/search/DownloadResults.aspx?q=KB2919442 も必要
$package="F:\Download\system\OS\Windows 8.1 Update 1\ja"

# cpuが32bitか64bitか
$cpu="x86"
# $cpu="x64"

if (test-path $mountpoint) {Remove-Item $mountpoint -recurse -force}
New-Item $mountpoint -type directory
Mount-WindowsImage -ImagePath $image -Index 1 -Path $mountpoint
Add-WindowsPackage -Path $mountpoint -PackagePath "$package\Windows8.1-KB2919442-$($cpu).msu"
Add-WindowsPackage -Path $mountpoint -PackagePath "$package\Windows8.1-KB2919355-$($cpu).msu"
Add-WindowsPackage -Path $mountpoint -PackagePath "$package\Windows8.1-KB2932046-$($cpu).msu"
Add-WindowsPackage -Path $mountpoint -PackagePath "$package\Windows8.1-KB2937592-$($cpu).msu"
Add-WindowsPackage -Path $mountpoint -PackagePath "$package\Windows8.1-KB2938439-$($cpu).msu"
Add-WindowsPackage -Path $mountpoint -PackagePath "$package\Windows8.1-KB2934018-$($cpu).msu"
"イメージファイルを更新してアンマウントします`n終了後WindowsSetupBox.exeを起動してISOを作成してください"
Dismount-WindowsImage -Path $mountpoint -Save
exit
269名無し~3.EXE:2014/04/12(土) 09:46:32.78 ID:tDTGw7ZH
せめて、
Add-WindowsPackage〜
・・・
はリストにしようぜ。
270名無し~3.EXE:2014/04/13(日) 15:28:57.25 ID:1eBlbwV+
リスト?
271名無し~3.EXE:2014/04/15(火) 16:34:52.27 ID:wQ4uabrw
http://toro.2ch.net/test/read.cgi/win/1382263043/572-584 の内容で >>268 を書き換え

# 回復イメージ保存先
$restore="F:\Restore"
# イメージファイルのマウント先
$mountpoint="F:\mount"
# Windows 8.1 Update 1(KB2919355) の保存先
# 32bit http://www.microsoft.com/ja-jp/download/details.aspx?id=42327 から事前に保存しておく
# 64bit http://www.microsoft.com/ja-jp/download/details.aspx?id=42335 から事前に保存しておく
# http://www.microsoft.com/ja-jp/search/DownloadResults.aspx?q=KB2919442 も必要
$package="F:\Download\system\OS\Windows 8.1\update 1"
# cpuが32bitか64bitか
$cpu="x86"
# $cpu="x64"

$imgwin="C:\ESD\Windows\sources\install.wim"
$imgesd="C:\ESD\Windows\sources\install.esd"
if (!(test-path $imgwin)) {
if (test-path $restore) {Remove-Item $restore -recurse -force}
New-Item $restore -type directory
Expand-WindowsImage -ImagePath $imgesd -Index 1 -ApplyPath $restore
New-WindowsImage -ImagePath $imgwin -CapturePath $restore -CompressionType "maximum" -Name "install"
}
if (test-path $mountpoint) {Remove-Item $mountpoint -recurse -force}
New-Item $mountpoint -type directory
Mount-WindowsImage -ImagePath $imgwin -Index 1 -Path $mountpoint
"2919442","2919355","2932046","2937592","2938439","2934018" | % {
Add-WindowsPackage -Path $mountpoint -PackagePath ("{0}\Windows8.1-KB{1}-{2}.msu" -f $package,$_,$cpu) }
Dismount-WindowsImage -Path $mountpoint -Save
"終了後、install.wimを削除あるいは移動してから`nWindowsSetupBox.exeを起動してISOを作成してください"
Export-WindowsImage -SourceImagePath $imgwin -SourceIndex 1 -DestinationImagePath $imgesd -CompressionType "recovery"
exit
272名無し~3.EXE:2014/04/15(火) 18:15:52.01 ID:ek2jNu14
なんかおかしな動作してるなと思って調べた結果ファイル名に[]を含んでる時だった
で原因はこれ

>about_wildcard
> [ ] ある範囲の文字と [a-l]ook book、cook、look took
> 一致する
> [ ] 指定された文字と一致する [bc]ook book、cook hook

ワイルドカードにファイル名として使用可能な文字が入ってる実装とか初めて見たわ
スクリプトのTest-Path,Copy-Item,Move-Item,Remove-Itemあたりを-LiteralPath指定に直しておくことにしよう
273名無し~3.EXE:2014/04/16(水) 01:21:08.47 ID:MmbQ+i/C
>("{0}\Windows8.1-KB{1}-{2}.msu" -f $package,$_,$cpu)
この書き方スゲーけど、自分には.NET臭がいやーん。

"${package}\Windows8.1-KB${_}-${cpu}.msu"
でいいよね、多分(´・ω・`)。
この例だと、${...}で括る必要すらないけど、付ける方がなにかと嵌りにくいので。
274名無し~3.EXE:2014/04/16(水) 09:54:09.40 ID:LCYMFVOM
Export-WindowsImage の圧縮形式で recovery は含まれてないようです (KeyNotFoundException発生)
http://toro.2ch.net/test/read.cgi/win/1382263043/601 を取り入れて書き直し

# ユーザー設定
$restore="F:\Restore" # 回復イメージ保存先
$mountpoint="F:\mount" # イメージファイルのマウント先
$package="F:\Download\system\OS\Windows 8.1\update 1" # 適用する Update 1(KB2919355) のパス
$cpu="x86" # cpuが32bit(x86)か64bit(x64)か

$imgwin="C:\ESD\Windows\sources\install.wim"
$imgesd="C:\ESD\Windows\sources\install.esd"
if (test-path $imgwin) {
if (test-path $mountpoint) {Remove-Item $mountpoint -recurse -force}
New-Item $mountpoint -type directory
Mount-WindowsImage -ImagePath $imgwin -Index 1 -Path $mountpoint
"2919442","2919355","2932046","2937592","2938439","2934018" | % {
Add-WindowsPackage -Path $mountpoint -PackagePath ("{0}\Windows8.1-KB{1}-{2}.msu" -f $package,$_,$cpu) }
Dismount-WindowsImage -Path $mountpoint -Save
dism /Export-Image /SourceImageFile:"$imgwin" /SourceIndex:1 /DestinationImageFile:"$imgesd" /Compress:recovery
} else {
if (test-path $restore) {Remove-Item $restore -recurse -force}
New-Item $restore -type directory
Expand-WindowsImage -ImagePath $imgesd -Index 1 -ApplyPath $restore
"2919442","2919355","2932046","2937592","2938439","2934018" | % {
Add-WindowsPackage -Path $restore -PackagePath ("{0}\Windows8.1-KB{1}-{2}.msu" -f $package,$_,$cpu) }
New-WindowsImage -ImagePath $imgwin -CapturePath $restore -CompressionType "maximum" -Name "install"
dism /Export-Image /SourceImageFile:"$imgwin" /SourceIndex:1 /DestinationImageFile:"$imgesd" /Compress:recovery
Remove-Item $restore -recurse -force
}
exit
275名無し~3.EXE:2014/04/18(金) 21:26:56.94 ID:j+HvgRYW
import-module "C:\Program Files\Windows Kits\8.1\Assessment and Deployment Kit\Deployment Tools\x86\DISM"
$env:path ="C:\Program Files\Windows Kits\8.1\Assessment and Deployment Kit\Deployment Tools\x86\DISM"

↑Windows7で最新ADK8.1update使用の人は、上記2行が必要かな?
ADKURL ttp://www.microsoft.com/ja-jp/download/details.aspx?id=39982
276名無し~3.EXE:2014/04/28(月) 06:00:11.88 ID:zaSH7LR3
スクリプトの中に適用する番号いちいち全部書くのはどうかな
$hoge = @("2919442","2919355","2932046","2937592","2938439","2934018")
$hoge|%{処理}
でなきゃ
Get-ChildItem -path $package -File|where name -match "$('Windows8.1-KB\d+-'+"$cpu"+'.msu')"|sort|%{処理}
でいいんじゃないの
277名無し~3.EXE:2014/04/28(月) 17:46:37.62 ID:sVz8uQcN
>>276
ふむ。
下の方がそのまま使い回せるから、いいね。
ただし、パッチ間に依存関係がなく適用順を考慮する必要がないこと。
であれば、
Get-ChildItem -path $package -File | %{処理}
として、$packageディレクトリに突っ込むだけ。

Update2 チンチン☆⌒ 凵\(\・∀・) マダァ?
278名無し~3.EXE:2014/04/29(火) 23:02:42.23 ID:GEBawTM/
awkみたいにテキストの前と後ろに一括で文字を加えたいのですが
似たような機能ないですか?
279名無し~3.EXE:2014/04/29(火) 23:52:04.40 ID:9jKWpPGF
get-content test.txt | %{ "aaa" + $_ + "bbb" } > test_add.txt
簡単だけどこんなの?
280名無し~3.EXE:2014/04/30(水) 00:30:50.69 ID:zrCM1K2W
おおおすごい!できました!ありがとうございました
281名無し~3.EXE:2014/04/30(水) 15:31:35.81 ID:ht1AbG0U
select-stringっていつの間にかbomなしのutf8にも対応してたんだな
前はダメだったよな
282名無し~3.EXE:2014/04/30(水) 20:27:37.13 ID:jJ6JRT5O
BOMなしだとエンコーディングの指定が必要ってだけだったと思う
283名無し~3.EXE:2014/04/30(水) 23:05:57.88 ID:gNq4Zyki
BOMってやっぱり「ボム」って読むの?
284名無し~3.EXE:2014/05/01(木) 09:06:14.92 ID:u/99qHNz
ボムなしはシューティングだと非常にまずい状況w
285名無し~3.EXE:2014/05/01(木) 19:35:00.51 ID:6Z2wIGGA
-enocoding defaultを指定するとbomありutf8とsjisがマッチして、未指定だとsjisがダメでbomなしutf8がマッチする
286名無し~3.EXE:2014/05/01(木) 23:53:23.23 ID:zyPWaFWV
bomありutf8じゃなくて、UTF-16LE(≒Unicode?)では?
287名無し~3.EXE:2014/05/03(土) 21:28:18.74 ID:pGeOmB8J
http://d.hatena.ne.jp/newpops/20061104/p1

クリップボードの操作は↑のようにIEオブジェクトを利用すればstaモードじゃなくても可能とのことですが
↑の例ではIEオブジェクトを使ってクリップボードに文字列を入れていますが
逆にクリップボードから文字列を取り出すことって出来ないのでしょうか?
288名無し~3.EXE:2014/05/03(土) 21:57:32.07 ID:CWiB/vtX
TextBox最強伝説(System.Windows.Forms.TextBox)というのがあってだね
ttp://scripting.cocolog-nifty.com/blog/2007/08/powershell_1b86.html
まあ最近はSTAがデフォルトだから System.Windows.Forms.Clipboard でもいいと思うけど
289287:2014/05/03(土) 22:20:10.83 ID:pGeOmB8J
>>288
ありがとうございます!今出来ないので後日試してみます。

PowerShell2.0環境なのでいちいちショートカット作って「-sta」ってするのも面倒だし

http://www.upken.jp/kb/PkyFMjOCpNxXMnXRJFaypEzAfDaSjM.html

↑みたいにVBCodeProvider?を使う方法も見つけたのですが
もう少しシンプルに出来ないかなと思ったのでw
こんな方法もあるんですね。勉強になりました。
290名無し~3.EXE:2014/05/03(土) 22:21:34.92 ID:pGeOmB8J
291名無し~3.EXE:2014/05/03(土) 22:44:33.36 ID:GXNFV3iR
パワーシェル芸人になりたいです
サンプルが豊富なサイト知りませんか?
292名無し~3.EXE:2014/05/03(土) 23:51:58.92 ID:IaQ3gTFc
>>291
芸人ならオリジナルで勝負しろよ
293名無し~3.EXE:2014/05/03(土) 23:54:53.90 ID:GXNFV3iR
芸人じゃないです、芸人になりたいんです><
294 忍法帖【Lv=40,xxxPT】(1+0:8) :2014/05/04(日) 01:18:24.71 ID:zRrsJapt
詳説正規表現とPowerShellクックブックだろ
本買え本
295名無し~3.EXE:2014/05/05(月) 17:23:56.15 ID:LhojqoV4
クックブッククックブック青い鳥〜
296名無し~3.EXE:2014/05/05(月) 19:26:54.87 ID:gv3ElBeX
>>263
http://tech.guitarrapc.com/entry/2014/04/09/065516 を見ながらインスコしてみました
OneGetのヘルプだけ更新できませんでした
https://github.com/OneGet/oneget/wiki/cmdlets を見たら何とかなるかな?

> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
5 0 9701 0

> get-command -Module oneget
CommandType Name Source
----------- ---- ------
Cmdlet Add-PackageSource oneget
Cmdlet Find-Package oneget
Cmdlet Get-Package oneget
Cmdlet Get-PackageSource oneget
Cmdlet Install-Package oneget
Cmdlet Remove-PackageSource oneget
Cmdlet Uninstall-Package oneget

> update-help -uiculture en-us
update-help : UI カルチャ {en-US} を使用してモジュール 'OneGet' のヘルプを更新できませんでした: セキュリティ上の理
由から、DTD はこの XML ドキュメントでは使用できません。DTD 処理を有効にするには、XmlReaderSettings の DtdProcessin
g プロパティを Parse に設定し、XmlReader.Create メソッドにその設定を渡してください。
発生場所 行:1 文字:1
+ update-help -uiculture en-us
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Update-Help]、Exception
+ FullyQualifiedErrorId : HelpInfoXmlValidationFailure,Microsoft.PowerShell.Commands.UpdateHelpCommand
297名無し~3.EXE:2014/05/08(木) 03:47:58.20 ID:5xhBrk25
whileとか使って1万行くらい回すと極端に遅くなるんだけどそんなもんですか?
他に方法ないでしょうか?
298名無し~3.EXE:2014/05/09(金) 10:11:58.37 ID:DXVb1gWw
メモリが足らなくなっている、んじゃね?
バッファを用意して少しずつ追い出しながらやる。

処理内容が全く分からんからあてずっぽうだけど。
299名無し~3.EXE:2014/05/10(土) 10:19:12.92 ID:9HXrdiIj
>>297
インタープリターはそういうもんだね。
処理する対象(データやオブジェクトとか)をどうやっても持っているか
によって、対処できる場合もあるけど。
300名無し~3.EXE:2014/05/11(日) 15:01:00.29 ID:EY5aIXza
>>297
まず、速度の違いを知らないと
ttp://toro.2ch.net/test/read.cgi/tech/1378978504/53

VBScript でループするとか
C#から PS スクリプトを呼び出すとか
自前ソフトなら機能をDLL化してロードして関数呼び出しするとか
301名無し~3.EXE:2014/05/16(金) 08:42:27.77 ID:LFr16yQR
Windows Management Framework 5.0 Preview May 2014
http://www.microsoft.com/en-us/download/details.aspx?id=42936
302名無し~3.EXE:2014/05/21(水) 20:32:31.54 ID:tXFxx2SA
try{
    gps hogehoge
}
catch [Microsoft.PowerShell.Commands.ProcessCommandException]{
    echo "ぬるぽ"
}

プロセス hogehoge が存在しないときに捕まえたいのですが
catchできません。

catch [System.SystemException]{
    echo "ガッ"
}
これなら良いのですが、プロセスが見つからないときだけcatchするにはどうすればいいでしょう?
303302:2014/05/21(水) 20:51:30.82 ID:APJK/217
訂正
gps -ErrorAction Stop hogehoge
304名無し~3.EXE:2014/05/21(水) 21:47:03.10 ID:Irul7gBx
try {gps -name hoge -ea stop} catch [Microsoft.PowerShell.Commands.ProcessCommandException]{"ga"}
で ga と表示されましたよ
305名無し~3.EXE:2014/05/21(水) 22:46:23.33 ID:AETeQi6t
>304
ありがとうございます。
うちの環境だと

Get-Process : 名前 "hoge" のプロセスが見つかりません。プロセス名を確認し、コマンドレットを再度呼び出してください。
発生場所 行:1 文字:9
+ try {gps <<<< -name hoge -ea stop} catch [Microsoft.PowerShell.Commands.ProcessCommandException]{"ga"}
+ CategoryInfo : ObjectNotFound: (hoge:String) [Get-Process]、ProcessCommandException
+ FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShell.Commands.GetProcessCommand

となってしまいます。
環境はWindows7 Professionalです。なにか追加でインストールなりロードなり必要でしたらご教授ください。
306名無し~3.EXE:2014/05/21(水) 23:35:14.25 ID:Irul7gBx
>>305
あれ、私の環境がおかしいのかな?

http://social.msdn.microsoft.com/Forums/ja-JP/6fa69292-7725-4108-abc0-8c87b3b95bd0/powershell?forum=powershellja
の回答1が正解のようです
307名無し~3.EXE:2014/05/22(木) 06:44:07.49 ID:pi1dHVEh
>306

なるほど。
大変助かりました。
ありがとうございました。
308名無し~3.EXE:2014/07/07(月) 01:22:38.64 ID:RaDW9diS
ユーザの名前を一覧で出力させるには?
309名無し~3.EXE:2014/07/09(水) 10:03:36.45 ID:RHF9cFIC
(Get-WmiObject Win32_UserAccount).Name
310名無し~3.EXE:2014/08/17(日) 07:17:30.78 ID:nTidPXoi
#「Windows Font Cache Service」を無効にする(管理者)
Set-Service "Windows Font Cache Service" -StartupType Disabled

#「Windows Font Cache Service」を停止する(管理者)
Stop-Service "Windows Font Cache Service"

#フォントキャッシュを削除する(Windows 8.1)(管理者)
Remove-Item $env:SystemRoot\System32\FNTCACHE.DAT
311名無し~3.EXE:2014/08/17(日) 08:42:40.04 ID:nTidPXoi
#レジストリのFontsキーのエントリで値に".otf","\"が含まれるものを表示する(管理者)
$reg = Get-Item "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts"
$reg.Property | % {
if (($reg.GetValue($_).ToString().Contains(".otf")) `
-or ($reg.GetValue($_).ToString().Contains(".OTF")) `
-or ($reg.GetValue($_).ToString().Contains("\"))) {"$($_): $($reg.GetValueKind($_)): $($reg.GetValue($_))"}
}
312名無し~3.EXE:2014/08/17(日) 18:11:24.36 ID:7VwdOWUQ
>>309
アクティブディレクトリの特定のOU内のグループに所属しているユーザーを出力したいのです
313名無し~3.EXE:2014/08/17(日) 23:04:33.31 ID:MS+vSuwa
Get-ADGroupMember
http://technet.microsoft.com/en-us/library/ee617193.aspx

-IdentityでOUやらなんやらを指定すればいいのかしら
314名無し~3.EXE:2014/09/05(金) 09:51:25.27 ID:R/uxyXQG
Windows Management Framework 5.0 Preview September 2014 (v5.0)が利用可能になりました
ttp://tech.guitarrapc.com/entry/2014/09/05/065912
315名無し~3.EXE:2014/09/09(火) 09:14:47.33 ID:RVcv+y/1
pythonの_ とかMatlabのansのように
最後に実行したコマンドの結果が自動で入る変数はありますか?
あるいは同等の機能を何らかの手段で追加できますか?
316名無し~3.EXE:2014/09/18(木) 14:31:45.32 ID:NuvG1PhL
Windows7proの3.0環境での質問です。

csvファイルを読み込んで別のcsvファイルとして出力したいのですが、以下の条件を満たす方法が見つからず悩んでいます。

1.foreachやselect-objectで指定した項目のみを出力
2.指定項目はテキストファイルから取得する

上記を満たす場合、ps1のソース内は取得項目名やその数を可変に対応できるようにしなくてはなりません。

foreachやselect-objectで項目を指定するところでループを挟むことはできないのでしょうか。
また、別の解決方法があればご教授願います。
317名無し~3.EXE:2014/09/18(木) 16:35:50.16 ID:vdaRty5H
関数にすればいいんじゃないから
対象項目をstartで指定して
処理実態をprocessに記述
endで出力に
とわければいいと思うよ。

関数自体の作り方は、簡易なので例を見ると
わかると思いますよ
318名無し~3.EXE:2014/09/18(木) 18:45:05.81 ID:NfblEp/b
316です

>>317
ありがとうございます。
軽く試してみましたが行けそうな感じです。
functionにするのは盲点でした。
助かりました。
319名無し~3.EXE:2014/09/23(火) 09:41:00.75 ID:mqsEgJNv
PowerShell 2.0 の日本語ヘルプ
http://technet.microsoft.com/ja-jp/windows/bb978525
320名無し~3.EXE:2014/09/23(火) 17:18:37.98 ID:kZ5o0mve
>>316
行ごとに指定項目があるとすると、

&amp;{ipcsv __csv__ | select $args[0]} $(gc __text__) | epcsv ...

でいいと思う
321名無し~3.EXE:2014/09/30(火) 11:23:47.45 ID:DE/c4KTR
Linuxのシェルよりも難解
322名無し~3.EXE:2014/09/30(火) 22:46:33.07 ID:4stdPi7Y
配下のディレクトリから任意の拡張子のファイルの総数を計算する

Linuxのシェルの場合
find . -type f -print0 | xargs -0 ls -db | grep -E '\.(avi|wmv|mp4)$' | wc -l

PowerShellの場合
(Get-ChildItem . -file | Where-Object Extension -match "^\.(avi|wmv|mp4)$").Length

個人的にはPowerShellのほうが分かりやすい
323名無し~3.EXE:2014/10/01(水) 20:58:14.19 ID:p3VsqX7w
オブジェクトで扱える範囲ならラクだな。
外れると、無理やり.NET使うより、他の言語を使う方がいいかな。
324名無し~3.EXE:2014/10/02(木) 09:57:20.24 ID:A2XBTmrg
Windows 10 Tech Preview における PowerShell をみてみよう
ttp://tech.guitarrapc.com/entry/2014/10/02/022922
325名無し~3.EXE:2014/10/02(木) 14:48:08.44 ID:cszK+ja5
はい。みます。
326名無し~3.EXE:2014/10/06(月) 18:04:23.53 ID:Y3dCvQWf
powershellにLinuxで言うところのmultipath( -ll)コマンドに相当するコマンドはありますでしょうか?
327名無し~3.EXE:2014/10/07(火) 00:24:52.56 ID:uH/MjMS6
328名無し~3.EXE:2014/10/07(火) 09:33:20.20 ID:SijVM56j
>>327
ありがとうございます!
329名無し~3.EXE:2014/10/18(土) 13:58:56.69 ID:ziiiKepv
Outlookのフォルダ構成を出力するのってどんなコマンドレットですか?
330名無し~3.EXE:2014/10/18(土) 18:49:53.81 ID:B1sMeRrX
Outlook のメールフォルダーならこれ

http://msdn.microsoft.com/en-us/magazine/dn189202.aspx
331名無し~3.EXE:2014/10/20(月) 22:47:45.32 ID:ZPRMtTcD
332名無し~3.EXE:2014/10/31(金) 03:25:17.07 ID:OdaxDxww
ヘルプをエディタに登録して引きたいんだけど
.chmとかで配付してるPSヘルプはないのかな?
333名無し~3.EXE:2014/10/31(金) 05:09:32.92 ID:sKOJyCiq
334333:2014/10/31(金) 05:12:33.09 ID:sKOJyCiq
335名無し~3.EXE:2014/10/31(金) 06:40:13.60 ID:OdaxDxww
>>333-334
そういうの
日本語のないのかと探したら、windows\helpの中に入ってたのね

これで十分です、お騒がせしました
336名無し~3.EXE:2014/11/06(木) 15:00:22.53 ID:6wgMlkw5
自身のdos窓のウインドウハンドルってどこで参照できる?
タイトル変えて探せば特定はできそうだけど、どこかに変数で保持してないかな
337名無し~3.EXE:2014/11/06(木) 15:17:40.51 ID:/ts29DOD
>自身のdos窓
って、起動したcmd.exeの意味じゃなくて?
338名無し~3.EXE:2014/11/06(木) 15:32:36.10 ID:6wgMlkw5
>>337
そうそれ
状況によって窓をアクティブにしたいんだけど、ハンドルがどこで参照できるのか分からない
339名無し~3.EXE:2014/11/06(木) 22:34:15.17 ID:dpNVCTt/
>>338
いろいろ探して、こんな風だとできることが分かった
参考になるかな?

$t = '[DllImport("user32.dll")] public static extern bool SetForegroundWindow(int handle);'
add-type -name win -member $t -namespace native
$p=([diagnostics.process]::GetProcesses() | ?{ $_.ProcessName -eq "cmd" -and $_.MainWindowHandle -ne 0 }).MainWindowHandle
[native.win]::SetForegroundWindow($p)
340339:2014/11/06(木) 22:58:02.41 ID:dpNVCTt/
341339:2014/11/06(木) 23:00:47.28 ID:dpNVCTt/
ということで
ハンドルの取得は
(Get-Process -Name cmd).MainWindowHandle
342名無し~3.EXE:2014/11/06(木) 23:16:37.61 ID:6wgMlkw5
>>339
ありがと

うーん、"user32.dll"の仕様はよく分からないけど、名前が"cmd"でハンドルの有るものを選んでるようだね
だから複数あったり直接powreshell.exeで起動したら見付からないし、自身のものである保証もない

てっきりget-hostから参照できるどっかにハンドルも格納されてると思ったんだけど、違うみたい
やっぱりウインドウタイトル変えてそれをget-processから見つける力業しかないのかな
343名無し~3.EXE:2014/11/06(木) 23:58:50.60 ID:dpNVCTt/
タイトル帰るとか、何かの違いが用意されてないと、識別できないよね
起動順序とかでいいなら、スタート時間が取れるので
それで識別することもできるけど。
344名無し~3.EXE:2014/11/07(金) 02:50:33.49 ID:INtvKPBd
せっかくなので力業のウィンドウアクティブ乗せとく
user32だと失敗することがあるみたいなんでVBので

$bu = $host.ui.RawUI.WindowTitle
$ran = '{0}{1}' -f (get-random),(get-random)
$host.ui.RawUI.WindowTitle = $ran
$myID = Get-Process|?{$_.MainWindowTitle -eq $ran}|%{return $_.ID}
$host.ui.RawUI.WindowTitle = $bu
[void] [System.Reflection.Assembly]::LoadWithPartialName("'Microsoft.VisualBasic")
[Microsoft.VisualBasic.Interaction]::AppActivate($myID)
345名無し~3.EXE:2014/11/07(金) 21:47:39.30 ID:B/gb3VZ7
Windows PowerShellを使って複雑なパターンのファイル名変更を行う
http://www.atmarkit.co.jp/ait/articles/1411/07/news133.html

コマンドプロンプトはゴミ
やっぱりPowerShellじゃねえとな
346名無し~3.EXE:2014/11/10(月) 23:05:33.07 ID:NA4/fSaw
識別名の記述が面倒いので、ログオン名とかをつかってADのグループにメンバーに追加する方法ありますでしょうか?
347名無し~3.EXE:2014/11/11(火) 22:53:33.09 ID:YRWrpokF
348346:2014/11/12(水) 04:03:25.82 ID:5rG2BVPO
>>347
それで良いよ!中々やるじゃね〜か!
正直、見直したZe!!
349名無し~3.EXE:2014/11/13(木) 16:08:28.18 ID:9Wk9HP6n
PowerShellの使える範囲が増えてきてるみたいだからと少し調べたらすごく好みで学習し始めたけど
外部コマンドの実行でハマってましたわ
単純なStringではなく@()配列にしないとダメなんだね

↓の 「Tip #2 : Do not put all arguments in one string」 て見て叫んでしまった
> Powershell-Everyday-FAQ: Top 5 tips for running external commands in Powershell
http://powershelleverydayfaq.blogspot.jp/2012/04/top-5-tips-for-running-external.html
コマンド実行時には単純に書いても動くのになあって頭かかえてたわ
350名無し~3.EXE:2014/11/13(木) 16:43:03.59 ID:QVA4sCv/
>>349
ダメっていうか、そうした方が見やすい、メンテしやすいってことじゃないの?
その上に単純なStringの羅列で動かすケースも書かれてるじゃん。
351名無し~3.EXE:2014/11/13(木) 17:18:55.92 ID:9Wk9HP6n
正直赤い文字しか見てなかったけど上のも1つ1つが区切られてるね
1つのStringではダメってのがわかってなくて詰まってたんだ
コマンドライン上では↓で動くけどスクリプトファイルでは動かなくて
& FastCopy.exe /cmd=update /bufsize=512 /utf8 Z:\test.txt /to=Z:\test\

sample.ps1が↓の内容だと動いた
$cmd = "FastCopy.exe"
$arguments = @("/cmd=update", "/bufsize=512", "/utf8", "Z:\test.txt", "/to=Z:\test\")
& $cmd $arguments

↓だと引数がうまくわたらなくて動かなかったけど、$argumentsが1つの引数として扱われちゃってたってことだよね
$cmd = "FastCopy.exe"
$arguments = "/cmd=update /bufsize=512 /utf8 Z:\test.txt /to=Z:\test\"
& $cmd $arguments

FastCopyはこれ http://ipmsg.org/tools/fastcopy.html
352名無し~3.EXE:2014/11/13(木) 21:12:45.95 ID:DZmkCj+c
コマンドを単純に文字列にしてから実行してるんじゃなく、オプションはアプリの引数に直接入れてるみたいだからな
その方が便利だけど
これだけでカレント上のファイル全部渡せるよ、文字数制限もない

&$cmd (dir -name)
353名無し~3.EXE:2014/11/13(木) 23:59:38.16 ID:9Wk9HP6n
情報thx
わかればすっきりするし使いやすい感じだね
試しに作ってるのはバックアップ用スクリプトだけど渡したいファイルとフォルダは一部だけなので
そこらへんはFastcopy側の/includeオプションを使う予定
ファイルごとにプロセス起動より親フォルダを渡してファイル指定したほうが速いだろうし

何度か試行した後に増殖したFastCopyプロセスも直感的に
Get-Process -name FastCopy | kill
でkillできたしISEの補完も便利だしほんといい子ですわ
もう少し慣れてきたら周りにも布教していきたいなあ
354名無し~3.EXE:2014/11/14(金) 01:09:25.01 ID:pL1OEaK7
ファイルの選別こそPSの得意分野だから利用したいところだけどね
コピーだとフォルダ構造の問題があるから難しいかな
355名無し~3.EXE:2014/11/14(金) 07:27:12.31 ID:nNp3sHTb
Fastcopy系って昔のwindowsのファイルコピーが糞だったから使われてただけで今は必要ないだろ
356名無し~3.EXE:2014/11/14(金) 10:23:55.82 ID:rRN7kLS9
fastcopyとかのフリーソフト入れて使うのは好みだと思うけど、robocopyの需要はあると思う

robocopy的な高速コピーってpowershellでできないのかな
357名無し~3.EXE:2014/11/14(金) 10:34:55.94 ID:mEmGibcS
robocopyって別に速さは売りにしてないんじゃ…
358名無し~3.EXE:2014/11/14(金) 20:00:57.10 ID:seqfcfYH
ファイルコピー系のソフトウェア否定論者ってどこにでもわくんだな…

それはまぁどうでもいいとして
robocopyはオプション豊富だしコピーだけじゃなくて同期もできるし、PSとの相性はよさそうだ
TechNetのギャラリーとか見るとけっこうあるね
359名無し~3.EXE:2014/11/16(日) 09:14:06.88 ID:PhmGGzhh
http://blogs.msdn.com/b/b8_ja/archive/2011/08/26/10201016.aspx

大量コピーに対応したサード パーティのコピー管理ツールをお持ちの方も多いはずです。
遠隔測定データによれば、こういったアドオンのうち最も人気のあるもの
(TeraCopy、FastCopy、Copy Handler など) であっても、
使用されているのは全 Windows 7 PC の 0.45% 未満に過ぎません。
Windows 7 の顧客ベースの大きさを考えれば絶対数としてはかなりのものですが、
多くのユーザーが大量コピーを得意とするツールを持っていないことは確かです。

私たちは、先述したようなアドオンに並ぶほどの機能をエクスプローラーに盛り込むつもりはありません。
サード パーティによるアドオンの市場は、今後も活発に継続していくものと考えています。
私たちが目指すのは、現在大量コピーをエクスプローラーで行っているユーザーに対して、
より高い制御性やコピー進行中の詳しい情報、そしてよりクリーンで効率的なエクスペリエンスを提供することです。
360名無し~3.EXE:2014/11/21(金) 01:37:14.76 ID:pxlKmCls
Windows Management Framework 5.0 Preview November 2014
http://www.microsoft.com/en-us/download/details.aspx?id=44987
361名無し~3.EXE:2014/11/25(火) 02:57:13.94 ID:hI5igBGK
ファイルシステム上のGet-ChildItemで取得した値のtoString()値は
指定引数によって.FullNameか.Nameか変わるのでしょうか?

-Include指定時のtoString()値は.FullNameで、-Directory -Recurseのみだと.Nameになる
-IncludeがあるとFullNameになるみたいだけどこれはそういう仕様と思えばいいの?
GetType()はDirectoryInfoで同じに見えるけど何か別のオブジェクトが渡されてるのかな
名前だけ欲しい場合は.Nameで取ったほうが安定か

フォルダ構成: C:\temp\test\; C:\temp\直下に複数のファイル
カレント: C:\temp

$testdir = Get-ChildItem -Directory
echo $testdir -> フォルダ構成が出力される
echo "$testdir" -> test と出力される

$includedir = Get-ChildItem -Directory -Recurse -Include "test"
echo $includedir -> フォルダ構成が出力される
echo "$includedir" -> C:\temp\test と出力される
362名無し~3.EXE:2014/11/25(火) 10:14:22.47 ID:oOD3GWLL
オブジェクトをtoString()するよりもプロパティを使った方がいいんじゃないかな
あと戻り値はオブジェクトの配列かオブジェクトになるから

Get-ChildItem -Directory | % {write $_.Name}
Get-ChildItem -Directory -Recurse -Include "test" | % {write $_.Name}

みたいにしてみては?

write (Get-ChildItem -Directory).Name
write (Get-ChildItem -Directory -Recurse -Include "test").Name

と等価です

#gciに-Directory ってスイッチあったのかあ
#gci | ? {$_.PSIsContainer} みたいなスクリプトはいつか書き直そう
363名無し~3.EXE:2014/11/25(火) 23:44:02.76 ID:n8rErSid
どうもです
.Nameでとったほうがよさそうですね

ライブラリわかれてるんですが
ファイルシステム用のGet-ChildItemページが別にあって、こっちに-Directoryがあります
http://technet.microsoft.com/ja-jp/library/hh847897.aspx
でも-Includeオプションの説明はこっち
http://technet.microsoft.com/ja-jp/library/hh849800%28v=wps.620%29.aspx

前者が子で後者が親みたいな関係ならしっくりくるけど
toString()が変わるってことは後者で上書きされてる感じもしてちょっとよくわかんない感じですね
364名無し~3.EXE:2014/12/01(月) 01:14:00.52 ID:7i9nN5jF
5.0からの機能だから正式にはまだ先になるけどGet-ItemPropertyValue便利だね
レジストリ値の取得が楽になるだけじゃなくファイル操作でも便利そう
365名無し~3.EXE:2014/12/02(火) 09:31:24.86 ID:istu/B0p
[v5] Auto-Generated Example-Driven Parsing について
http://winscript.jp/powershell/285

>さてさて、PowerShell Advent Calendar 2014、今年は参加者が少なく、完走はかなり危ぶまれます
366名無し~3.EXE:2014/12/02(火) 15:32:57.50 ID:hRx+R6Cs
リンク先見たがだいぶ厳しいな・・・
367名無し~3.EXE:2014/12/02(火) 18:52:33.49 ID:w2uuQM6F
MSVPの彼が、残り全部埋めればよい。
368名無し~3.EXE:2014/12/03(水) 22:26:38.76 ID:7egoi+OK
WindowsのタスクスケジューラーでPowerShellのスクリプトを実行する際には「パス」に注意
http://www.atmarkit.co.jp/ait/articles/1412/03/news125.html
369名無し~3.EXE:2014/12/07(日) 15:35:05.33 ID:mOOkbryn
パワーシェルの自動化の便利さをまだ体感できてない。
370名無し~3.EXE:2014/12/10(水) 14:25:18.05 ID:GHw9koD0
PowerShell以外の方法による自動化の便利さは体感したことあるん?
371名無し~3.EXE:2014/12/11(木) 23:37:34.12 ID:iYiLSWBv
gci -r C:\hoge\ | select fullname, lastwritetime

↑のようなコマンド打つと、C:\hogeフォルダ内のファイルのフルパスと更新日時が表示されるけど
更新日時ではなく前回保存日時を出力するには何を指定すればよいのでしょうか?
372名無し~3.EXE:2014/12/12(金) 23:54:29.69 ID:yBQAKAdl
勝手に更新日時が書き換えられちゃってるってことかな
前回保存日時なるものと更新日時の違いがシステム的にわからないと思うよ
373名無しさん@そうだ選挙に行こう:2014/12/13(土) 12:53:47.85 ID:kG8OH1wq
他に表示できるのはcreationtimeかlastaccesstimeですね
OSが持ってないものは無理かと
374名無しさん@そうだ選挙に行こう:2014/12/13(土) 13:27:11.44 ID:vJoLL72q
多分 Excel なんかのプロパティで表示される前回保存日のことかしらん。
一応とってくることは可能かと
対応してないファイルは無視するしかないが。

http://msdn.microsoft.com/ja-jp/library/microsoft.office.tools.excel.workbook.builtindocumentproperties.aspx
375名無しさん@そうだ選挙に行こう:2014/12/13(土) 13:56:42.97 ID:HpskaZuL
エスパーたちの集い
376名無しさん@そうだ選挙に行こう:2014/12/14(日) 18:14:10.17 ID:fB/9E7NR
Powershell を使って windows のインデックスを使ったファイル検索は可能なんでしょうか?
スタートメニューの「プログラムとファイルの検索」の部分です。
377名無しさん@そうだ選挙に行こう:2014/12/14(日) 18:46:59.68 ID:fB/9E7NR
378名無し~3.EXE:2014/12/18(木) 00:05:39.96 ID:wqr0s9SP
@C:\hogeの内容が以下の通りだったとします。

PS C:\hoge> gci

Mode        LastWriteTime   Length Name
----        -------------   ------ ----
-a---    2014/12/17   23:48    9230 AAA.txt
-a---    2014/12/17   23:48    9230 BBB.txt
-a---    2014/12/17   23:51   30030 CCC.xlsx
-a---    2014/12/17   23:50   50694 DDD.jpeg
-a---    2014/12/17   23:50   50694 EEE.jpeg
-a---    2014/12/17   23:50   50694 FFF.jpeg


A拡張子ごとのファイル数を表示します。

PS C:\hoge> gci | group extension

Count Name           Group
----- ----           -----
  2 .txt           {AAA.txt, BBB.txt}
  1 .xlsx           {CCC.xlsx}
  3 .jpeg           {DDD.jpeg, EEE.jpeg, FFF.jpeg}
379378:2014/12/18(木) 00:07:18.25 ID:wqr0s9SP
>>378のAで拡張子ごとのファイル数だけでなく、以下のように拡張子ごとの合計サイズも出すには
どのようなコマンドを書けばよいのでしょうか?

Count Name  Length
----- ----  -----
  2 .txt  18460
  1 .xls  30030
  3 .jpeg  152028
380378:2014/12/18(木) 00:10:23.18 ID:wqr0s9SP
↑の「1 .xls」は「1 .xlsx」の誤りです。申し訳ありません。
381名無し~3.EXE:2014/12/18(木) 01:00:59.99 ID:ug1yf7Dn
>>378
gci -File|group extension|select count,name,@{L="Length";E={$_.group|measure -sum length|select -expand sum}}
382378:2014/12/18(木) 22:23:18.57 ID:wqr0s9SP
>>381
バッチリできました!どうもありがとうございます!

でも意味が全くわからないのでこれから勉強します…orz
383名無し~3.EXE:2014/12/18(木) 23:25:32.05 ID:8pnYfmMr
手癖で cd ~/ と打ったら、ちゃんと $HOME に移動して
なんか笑えた
384名無し~3.EXE:2014/12/19(金) 01:09:16.15 ID:fsO5uHW5
>>383
こんなのはどうでしょうか
function prompt {
"`n{0:MM/dd(ddd)HH:mm} {1} {2}@{3} {4}`n`$ " -f (Get-Date),$pid,$env:USERNAME,$env:USERDOMAIN,$pwd.path.replace($env:HOME,"~").replace("\","/")
}

元に戻すときは
function prompt {
"PS $($executioncontext.sessionstate.path.currentlocation)$('>' * ($nestedpromptlevel + 1)) "
}
385名無し~3.EXE:2014/12/20(土) 09:41:50.04 ID:vyNY5oGf
>>365-367
https://twitter.com/mutaguchi/status/545993269214081025

PowerShellアドベントカレンダー、12/22が埋まらなかったので自分で埋めることにしました。
386名無し~3.EXE:2014/12/21(日) 18:14:55.65 ID:9U0H3/aj
ようやくPowerShell インストールできた
zshやawkとかUnixの知識はあるけど、
そんなやつに適したクイックスタートの情報ある?
387名無し~3.EXE:2014/12/21(日) 18:28:10.98 ID:F1mzobz+
それらの知識はなかったものとして習得するのが一番の近道

いやまじで。
388名無し~3.EXE:2014/12/21(日) 18:34:08.04 ID:9U0H3/aj
了解 MSらしいな >それらの知識はなかったものとして習得するのが一番の近道
とりあえずお薦めのURL頼む
履歴参照やスクロール1つすらホームポジションで行えない
389名無し~3.EXE:2014/12/21(日) 18:51:29.79 ID:7z5/tsoz
Unix のシェルに慣れ親しんでる人ほど
使ってるうちに微妙だけどクリティカルな違いにイラつきだして
最終的に強烈なアンチになるイメージ
390名無し~3.EXE:2014/12/21(日) 21:58:46.37 ID:tLf8y93h
391名無し~3.EXE:2014/12/21(日) 22:58:37.70 ID:9U0H3/aj
>>390
ありがとう
これで助かった
392名無し~3.EXE:2014/12/21(日) 23:14:40.81 ID:qlRtENVg
最初、パイプにバイナリデータ流して嵌まった
393名無し~3.EXE:2014/12/22(月) 00:17:47.73 ID:/SF4aoYi
>>392
一瞬排水溝の話かと思ったw
394名無し~3.EXE:2015/01/14(水) 10:12:16.87 ID:mzQFAxF2
https://twitter.com/gregzakharov/status/555057287904362496

PowerShellが遅すぎなのかLINQが速すぎなのか
395名無し~3.EXE:2015/01/17(土) 10:24:52.59 ID:KYtNM984
IEを操作するシェルを書いているのですが、
ファイル保存ダイアログのOKボタンを押す方法が解らず
困っております。

どのように書けば良いのでしょうか?

よろしくお願いします。
396名無し~3.EXE:2015/01/17(土) 21:37:57.28 ID:KYtNM984
あと、IT系は、政府が優先的に派遣法改悪の最初の犠牲者にするから、
選ばない方が良い。
397名無し~3.EXE:2015/01/18(日) 09:48:48.16 ID:4W85U26x
>>394
比べるほうがおかしいだろ
398名無し~3.EXE:2015/01/18(日) 17:07:30.94 ID:i1TnYdID
>>394
あれ、おれがやったら、それほどの差はでない。
Millisecondsで
137
28 
という値になったよ。
399名無し~3.EXE:2015/01/24(土) 22:29:55.72 ID:uv0cNTa6
Powershell vs Applescript
http://www.techwars.io/fight/powershell/applescript/

圧倒的じゃないか、我が軍は
400名無し~3.EXE:2015/01/25(日) 02:20:00.69 ID:a6TGa4RQ
ようし、つぎはシェルスクリプトと比べてみよう
401名無し~3.EXE:2015/01/25(日) 20:36:31.98 ID:1bBvdYii
cygwin 相手に速度負けするから止めて
402名無し~3.EXE:2015/01/26(月) 20:39:07.28 ID:exIsBPN9
今回のWindows10previewのバージョン情報
OSのビルド番号とPowerShellのマイナー番号が同じになってるっぽい
細かい違いはわからん

Name               Value
----               -----
PSVersion             5.0.9926.2
WSManStackVersion      3.0
SerializationVersion        1.1.0.1
CLRVersion            4.0.30319.0
BuildVersion           10.0.9926.2
PSCompatibleVersions     {1.0, 2.0, 3.0, 4.0...}
PSRemotingProtocolVersion  2.2
403名無し~3.EXE:2015/01/28(水) 21:32:43.23 ID:cM3+Q5uH
ノーマルのWindows8.1で
PowershellでQoSの設定をしたけど
機能しないのですが、いい方法とか見落としていることとかありませんかね・・・?
(8.1 Proだと動作するのを確認しました。ローカルグループポリシーとPowershellの両方で)

New-netqospolicy -Name "Mail" -IPDstPort 465 -IPProtocol TCP -ThrottleRateActionBitsPerSecond 500KB
404名無し~3.EXE:2015/01/29(木) 09:48:32.80 ID:iGSye7VZ
違うかもしれないけど、WoW64かな?
405名無し~3.EXE:2015/01/29(木) 17:37:54.39 ID:quBhVR6D
どちらも手動設定で64bit版だから、おそらく大丈夫なはず。
Proとノーマルだと使うレジストリが違うようで
ノーマルだとどうやっても無理ですかね・・・
406名無し~3.EXE:2015/01/30(金) 01:17:06.33 ID:+yrsPmcC
ノーマルだと初期状態ではQoSパケットスケジューラ入ってない、ってことはないかさすがに
407名無し~3.EXE:2015/01/30(金) 02:23:57.46 ID:umW5aLIt
408名無し~3.EXE:2015/01/30(金) 20:18:28.83 ID:voHe85QL
>>406
さすがにそこは大丈夫です。

>>407
対象が鯖っぽいから
クライアントだと違うかな・・・?
409名無し~3.EXE:2015/01/30(金) 20:21:23.94 ID:voHe85QL
所詮、家庭内LANなので・・・
410名無し~3.EXE:2015/01/30(金) 21:49:47.18 ID:bYtcW2zm
コマンド自体は存在するの?
411名無し~3.EXE:2015/01/31(土) 15:51:34.73 ID:n4CehBsX
コマンド自体は成立していて、
設定もGet-NetQoSPolicyで見ると反映されています。

ただ、Proとは違う場所に設定を書き込んでいる模様・・・
"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\QoS"
Proだとここに書き込まれるのですが、無印8.1だとここではないようです。
412名無し~3.EXE:2015/02/01(日) 13:33:16.68 ID:A2uiqx+f
Powershellでサーバ構築とかできるもん?
サイトあれば教えて
413名無し~3.EXE:2015/02/01(日) 15:08:42.98 ID:Ja35gSiY
サーバー構築というのをどういう意味で言っているのかわからないしサーバーの種類もわからない
ソフトのサイレントインストールとか設定ならものによってはある程度可能だけど
0からPowershellでサーバーを作るのは骨が折れると思う

どういうサーバーをどうやって構築したいのかを決めてからググってみてください
414名無し~3.EXE:2015/02/03(火) 21:24:46.54 ID:PZfcBf+r
構築というより設定です。
FTPサイトの追加とかDNSの設定とか
415名無し~3.EXE:2015/02/03(火) 22:14:33.94 ID:fDeLHIlw
そのへんのキーワードにpowershellって追加して検索してみるといい
英語のほうが出てきやすいかもしれんが日本語でもたぶんあるよ
416名無し~3.EXE:2015/02/23(月) 21:04:15.56 ID:Ok+2rOTR
try catch がクソすぎないか?
Reason : ItemNotFoundException
だというので
catch [System.Management.Automation.ItemNotFoundException]
と書いてみたがキャッチできない
catch [System.Management.Automation.RuntimeException]
ならキャッチできた。はぁ?なにこれ。
417名無し~3.EXE:2015/02/24(火) 23:03:42.26 ID:/tjktPOU
Microsoft、「Windows PowerShell ISE」のアドオン「Module Browser」を無償公開
http://www.forest.impress.co.jp/docs/news/20150224_689793.html
418名無し~3.EXE:2015/02/25(水) 10:14:06.05 ID:6wL9ooQ6
>>416
どーゆー場面での話?
うちの環境だと例えばGet-Itemが投げるItemNotFoundExceptionは
catch [System.Management.Automation.ItemNotFoundException] でキャッチできたけど
419名無し~3.EXE:2015/02/25(水) 13:06:04.95 ID:izOR9dvm
>>418
マジか
例えばこんなコード。本当はItemNotFoundExceptionをキャッチしたい

$ErrorActionPreference = "Stop"

$targetfiles = @()
try {
  foreach ($target in $Args) {
    $targetfiles = $targetfiles + @(ls $target | ?{ $_.Name -cmatch ".*\.csv$" })
  }
} catch [System.Management.Automation.RuntimeException] {
  "引数に指定したファイルが存在しません`n$target"
  exit 1
}
420名無し~3.EXE:2015/02/25(水) 21:52:03.36 ID:o0l3e0bG
>>419
.csvが無い時にエラーにしてほしいの?
そのコードだと.csvファイルが無い時はエラーも何も起きない気がするんだけど
421名無し~3.EXE:2015/02/25(水) 23:05:04.97 ID:izOR9dvm
>>420
引数にcsvファイル名を指定する前提だからその場合は ls $target の時点でエラーになるんだよ
$targetfilesが空かのチェックは後続コードでやってる

ていうかそういうことはいいんだよ。
>>419を実行するとItemNotFoundExceptionではキャッチできないのが問題なんだよ。結局PSのバグなのか?
$ErrorはErrorRecordオブジェクトだったり面倒くさい実装しやがって
422名無し~3.EXE:2015/02/25(水) 23:06:24.37 ID:o0l3e0bG
ls $target の所か
$targetに存在しないファイルが来るとItemNotFoundExceptionが投げられる

http://i.imgur.com/T9c0F8U.png
423名無し~3.EXE:2015/02/26(木) 08:33:12.39 ID:9w8clM8u
>>421
もしかしてPowerShellのバージョンは2.0?
バージョンによって挙動が違うらしいけど
それが関係してる?

https://twitter.com/mutaguchi/status/570562195479597057
https://twitter.com/mutaguchi/status/570564740134514688
https://twitter.com/mutaguchi/status/570564935328997377
https://twitter.com/mutaguchi/status/570569659281317889
https://twitter.com/mutaguchi/status/570572243035512833

ActionPreferenceStopExceptionの基底クラスがRuntimeExceptionだから
RuntimeExceptionでもcatchできると

https://msdn.microsoft.com/en-us/library/system.management.automation.actionpreferencestopexception.aspx
424421:2015/02/26(木) 17:51:58.02 ID:AgWRqx80
>>423
おお
わざわざ調べてくれてありがとう
まさにそれっぽいわ

PS C:\Windows\system32> $PSVersionTable

Name                 Value
----                 -----
CLRVersion             2.0.50727.5485
BuildVersion             6.1.7601.17514
PSVersion              2.0
WSManStackVersion       2.0
PSCompatibleVersions      {1.0, 2.0}
SerializationVersion         1.1.0.1
PSRemotingProtocolVersion  2.1

バージョン上げてみる
425名無し~3.EXE:2015/02/26(木) 21:05:12.07 ID:AgWRqx80
バージョン上げたらキャッチできた。
で、>>423https://twitter.com/mutaguchi/status/570572243035512833
も検証してみたがその通りだった。

try {
  ls $Args[0]
} catch [System.Management.Automation.ItemNotFoundException] {
  "ItemNotFoundException"
} catch [System.Management.Automation.ActionPreferenceStopException] {
  "ActionPreferenceStopException"
}

結果:ActionPreferenceStopException

まあこれは百歩譲るとして

} catch [System.Management.Automation.ItemNotFoundException] {
  "ItemNotFoundException"
} catch [System.Management.Automation.RuntimeException] {
  "RuntimeException"
}

結果:RuntimeException
426名無し~3.EXE:2015/02/26(木) 21:09:56.69 ID:AgWRqx80
} catch [System.Management.Automation.ItemNotFoundException] {
  "ItemNotFoundException"
} catch [System.Exception] {
  "Exception"
}

結果:Exception
おいふざけんなコラ

try {
  try {
    ls $Args[0]
  } catch [System.Management.Automation.ItemNotFoundException] {
    "ItemNotFoundException"
  }
} catch [System.Exception] {
  "Exception"
}

これならItemNotFoundExceptionになる 👀
427名無し~3.EXE:2015/02/26(木) 21:19:49.34 ID:AgWRqx80
結論
ver3.0以降ではthrowされた例外をまずActionPreferenceStopExceptionとして
catchブロックをスキャンし、catchできるブロックがない場合に
本来の例外型でcatchブロックをスキャンしなおす

そのためActionPreferenceStopExceptionのスーパークラスである
RuntimeException、SystemException、Exceptionのcatchを
RuntimeExceptionのサブクラスのcatchと並べて書いてはいけない。

マイクロソフトは死ね
428名無し~3.EXE:2015/02/27(金) 01:35:28.89 ID:0XcQcnoR
>>426
なんで426に目玉がつくの?
429名無し~3.EXE:2015/02/27(金) 08:53:44.23 ID:bSthd26A
&amp#128064;
👀
430名無し~3.EXE:2015/02/27(金) 08:54:19.35 ID:bSthd26A
&amp;#128064;
こうか
431名無し~3.EXE:2015/02/27(金) 18:29:37.90 ID:9x7T7vro
練習

&amp;amp#128064;
432名無し~3.EXE:2015/02/27(金) 18:33:06.04 ID:9x7T7vro
あれ?

&$128064
433名無し~3.EXE:2015/02/27(金) 18:35:40.04 ID:9x7T7vro
こうかな?

👀
434名無し~3.EXE:2015/02/27(金) 18:37:45.80 ID:9x7T7vro
ぱちぱち
ユニコードの指定か〜
👏
435名無し~3.EXE:2015/02/27(金) 18:40:26.39 ID:8jWPI845
/*--------------*/
/*---main.asm---*/
/*--------------*/
436名無し~3.EXE:2015/02/28(土) 20:55:47.33 ID:hGktvx7/
俺も目玉練習&amp;#128064;…じゃなくて質問があります

ユーザーが入力した文字列をオプションとしてコマンドに渡したいのですが
どのようにすればいいですか?

$options = ReadHost
> -i input.mp3 -ac 1 -ab 64k output.mp3
ffmpeg $options
例えば↑のようにすると$options文字列全体が単一のオプション
として解釈されてしまうのですが、これを複数のオプションとして渡したいです。

ご存知の方、ご回答お願いします
437名無し~3.EXE:2015/02/28(土) 23:00:28.59 ID:moTz53+a
$options = (Read-Host) -split " "
ffmpeg @options
438名無し~3.EXE:2015/02/28(土) 23:19:54.76 ID:moTz53+a
439436:2015/03/01(日) 00:30:09.87 ID:4pMWpHBt
>437-438
レスありがとうございます!
なるほど、配列にすればいいんですね
目から鱗です

出先から携帯でレスしてるので帰ってから試してみます
めちゃくちゃ助かりました
440名無し~3.EXE:2015/03/01(日) 07:19:23.87 ID:OSMqI2rj
>>437
そっか -split というオプションあるのね。
.NETの機能そのまま使って
(Read-Host).Split(" ")
でもいいですね。
cmdletの中身自体がこれだろうな。
441名無し~3.EXE:2015/03/01(日) 09:08:26.40 ID:8xk8MoFK
>>440
-splitはRead-Hostのパラメータじゃなくて演算子だよ

about_split
https://technet.microsoft.com/ja-jp/windows/dd347708.aspx
442名無し~3.EXE:2015/03/01(日) 18:09:34.71 ID:/aHo9vmY
あ、ほんとだね。
ありがと
443名無し~3.EXE:2015/03/05(木) 03:22:42.31 ID:pIr+FJWY
組織変更に伴い、ファイルサーバとADの置換を行いたいとおもいます。
NTFSのアクセス権をSIDで検索してSIDできれば権限を置換したいのですが可能でしょうか?置換する元データはExcelで旧SIDと新SIDと権限を用意して、上から検索してEOFまで実行していきたいです。
444名無し~3.EXE:2015/03/05(木) 14:58:15.21 ID:v2jdIrjM
>>443
夜中にレスがつかないからってマルチやめれ
http://peace.2ch.net/test/read.cgi/tech/1378978504/373
445名無し~3.EXE
マルチってぜんぜん違う板なんだからいいと思うよ