Windows PowerShell 2.0 Part2

このエントリーをはてなブックマークに追加
1名無し~3.EXE
2名無し~3.EXE:2009/12/18(金) 12:15:07 ID:H2dW8sR1
PowerShell の起動を高速化する
ttp://flamework.net/archives/10
ttp://powershell.hiros-dot.net/post/2008/07/30/PowerShelle381aee8b5b7e58b95e38292e9809fe3818fe38199e3828b.aspx

スクリプトの実行ポリシー (Execution Policy) をグループポリシーで一元管理する
ttp://d.hatena.ne.jp/newpops/20080416

コマンドプロンプト・ UNIX系OSのシェルとのコマンド対応表
ttp://marxsoftware.blogspot.com/2008/03/comparing-unixlinux-powershell-and.html
ttp://en.wikipedia.org/wiki/Windows_PowerShell#Cmdlets_2

VBScript コマンドから Windows PowerShell コマンドへの変換
http://www.microsoft.com/japan/technet/scriptcenter/topics/winpsh/convert/default.mspx

キーバインド変更
XKeymacs
ttp://www.cam.hi-ho.ne.jp/oishi/
窓使いの憂鬱
ttp://mayu.sourceforge.net/

コマンドレットオンラインヘルプ作成 ver2
ttp://blogs.wankuma.com/mutaguchi/archive/2006/12/08/49387.aspx

Windows Server 2008 のサーバーコアに PowerShell をインストール
PowerShell on Server Core
ttp://dmitrysotnikov.wordpress.com/2008/05/15/powershell-on-server-core/
3名無し~3.EXE:2009/12/18(金) 12:16:47 ID:H2dW8sR1
■エディタとかIDEとか
PowerShell Analyzer (45日間試用可能)/ PowerShell Plus (個人使用無料)
ttp://www.powershell.com/index.html
PowerGUI
ttp://www.powergui.org/index.jspa
Admin Script Editor (45日間試用可能・ フォームデザイナ)
ttp://www.adminscripteditor.com/index.asp

■コマンドレットとかプロバイダとかその辺
・PowerShell Community Extensions
ttp://www.codeplex.com/PowerShellCX
・アクティブディレクトリー - Free PowerShell Commands for Active Directory
ttp://www.quest.com/powershell/activeroles-server.aspx
・IIS7 PowerShell Provider Tech Preview 2
ttp://blogs.msdn.com/powershell/archive/2008/07/03/iis7-powershell-provider-tech-preview-2.aspx
・グループポリシー - SDM GPMC PowerShell Cmdlets
ttp://www.sdmsoftware.com/freeware
・SSH クライアント / サーバー - NetCmdlets for Windows PowerShell
ttp://www.nsoftware.com/PowerShell/
・Officeファイル(Open XML)生成 ・操作 - Open Xml Power Tools at Staff DotNet Staff DotNet
ttp://staffdotnet.com/services/powertools.html

■その他
タブ補完機能強化ツール - PowerTab
ttp://thepowershellguy.com/blogs/posh/pages/powertab.aspx
・Visio 2007 用 Windows PowerShell スクリプト生成ツール
ttp://www.visio.jp/dl/visPowerShell/index.html
・WSH から PowerShell を利用する - ActiveX PowerShell(ActiveXPoSH)
ttp://www.primalscript.com/Free_Tools/index.asp
4名無し~3.EXE:2009/12/18(金) 14:57:56 ID:ZTSryej3
>>1
5名無し~3.EXE:2009/12/18(金) 21:41:13 ID:wjlTp1Ca
>>1
PowerShell 2.0 の Part2 ってするくらいならせめてリンク先ちゃんと変えろよw
ぶっちゃけバージョンごとにスレ番変える必要はないと思うけど
6名無し~3.EXE:2009/12/19(土) 11:11:41 ID:qOfdkuAO
>>1おつ
7名無し~3.EXE:2009/12/19(土) 13:19:47 ID:6t1jUQFW
>>5
すいません
気付きませんでした
8名無し~3.EXE:2009/12/19(土) 19:54:11 ID:G0uD9R9e
や、だから誰か貼ろうよw

Windows 管理フレームワーク (Windows PowerShell 2. 0、WinRM 2. 0、および BITS 4. 0)
http://support.microsoft.com/kb/968929

>>1 のリンクは 1.0 と 2.0 CTP2 のもので現在最新は 2.0 RTM だから注意

9名無し~3.EXE:2009/12/27(日) 16:56:57 ID:DBMTfN0o
だれか、以下の条件を満たす*.ps1ファイルの関連付け教えて

1. ps1スクリプトに複数のファイルをD&Dして各ファイルの絶対パスを渡す
2. 絶対パスは文字列の配列としてスクリプトに渡す
3. パス/ファイル名として使える文字全てに対応
4. Ver2.0でしか動かなくてもOK
5. 引数の事前処理としてバッチファイルの併用可
6. *.batの関連付けで引数の部分変更可

自分でやってたけど & とスペースが組み合わさったファイル名の時の対策がどうにも難儀だわ
10名無し~3.EXE:2009/12/27(日) 22:14:14 ID:BdtTg34B
どこまでできたの?
119:2009/12/27(日) 22:25:48 ID:DBMTfN0o
>>10
ps1スクリプトの関連付けを run.bat "%1" "%*" として
↓みたいなPowerShellを起動するバッチファイルを作ったけど、正直全然やりたいことできてない

set arg=%*
set arg=%arg:&=^&%
set arg="%arg:"=''%"
set arg=%arg:''''=''%
set arg=%arg:~1,-3%

rem ↓書き込みの制限で改行してるけど、実際には改行してない
powershell "$str = iex ('@''' + (echo `n) + ' %arg% ' + (echo `n) + '''@'); $str = [System.Management.Automation.PSParser]::Tokenize($str, [ref]$null) |
select -exp Content; $files = New-Object System.Collections.ArrayList; $path = ''; foreach ( $fragment in $str ) { $path += $fragment;
if ( Test-Path $path ) { [void]$files.Add($path); $path = ''; }} $files; & '%1' $files"

今はバッチファイルは使わずに powershell.exe "$a = '%1' " みたいな感じでやってみようかと思うけど、にんともかんとも
12名無し~3.EXE:2009/12/27(日) 22:54:02 ID:DBMTfN0o
あー・・・できたかも、これでどうだろ

# PS1ファイルへのドラッグを有効化する
cp -Path HKCR:\VBSFile\ShellEx\ -Destination HKCR:\Microsoft.PowerShellScript.1\
cp -Path HKCR:\VBSFile\ShellEx\DropHandler -Destination HKCR:\Microsoft.PowerShellScript.1\ShellEx

# D&Dされたファイルを引数にスクリプトを実行可能にする
New-Item HKCR:\Microsoft.PowerShellScript.1\shell\open
New-Item HKCR:\Microsoft.PowerShellScript.1\shell\open\command

$command = @'
C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe -NoExit "&'%1' ('%*' -replace '(\w+\:)',',$1' -split ',' -ne '' )"
'@

# 引数はファイルのフルパスなので、ドライブレターの前にカンマ入れて分割
New-ItemProperty -Path HKCR:\Microsoft.PowerShellScript.1\shell\open\command -Name "(default)" -Value $command


テストに使ったファイル名が適当なので、暇な人は試してみてくれると嬉しい
13名無し~3.EXE:2009/12/28(月) 00:09:21 ID:zEknC33x
ごめん、>>12だとファイル名に'がある時にエラーが出るままだった

C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe -NoExit "&'%1' ((iex ('@''' + (echo `n) + ([String]{<#%*#>} -replace '^<#(.*)#>','$1') + (echo `n) +'''@')) -replace '(\w+\:)',',$1' -split ',' -ne '')"

{<#%*#>} のところ {#%*} ってできれば1.0でもそのまま使えるんだけど
なぜかこっちは文として完結してないって解釈されるみたいなんだよなー
まあ別に1.0で使える必要性はないんだけども
14名無し~3.EXE:2009/12/28(月) 14:29:52 ID:UrzeYzpP
powershell.exe -file "%1" %*
で駄目な例は?
15名無し~3.EXE:2009/12/29(火) 19:30:34 ID:AryjUNOo
>>14
あー、Fileを指定してると他はスクリプトの引数として扱ってくれるのか・・・全く見落としてた、ありがとう
しいて言うなら引数は$argsで処理するから [CmdletBinding()] と併用できないって程度かな?
それを気にしないならその方がスマートだねぃ
16名無し~3.EXE:2009/12/30(水) 00:39:55 ID:hRpSXntc
powershell.exe "〜"
one linerの〜の部分の書き方、どこかにない?
"'`のエスケープがうまくいかん
17名無し~3.EXE:2009/12/30(水) 19:23:36 ID:VvqrAlii
>>16
"(二重引用符)はcmd.exeの方で解釈しちゃうからエスケープは無理だと思う
ちゃんと調べてないから知らないけど
他はそのまま使えるはず

もしくは↓みたいにBase-64でエンコードした文字列を-EncodedCommandの引数として渡すとか
Base64形式のエンコードされたコマンドを実行する
ttp://handcraft.blogsite.org/ComponentGeek/ShowArticle/199.aspx
18名無し~3.EXE:2009/12/31(木) 17:14:47 ID:YWHBEI29
>"(二重引用符)はcmd.exeの方で解釈しちゃうからエスケープは無理だと思う
なことはない
19名無し~3.EXE:2010/01/01(金) 22:11:09 ID:rSmx3hBm
折角なので調べてみた

猫科研究所(felid labo) - コマンドプロンプトのエスケープ仕様
ttp://www.up-cat.net/%25A5%25B3%25A5%25DE%25A5%25F3%25A5%25C9%25A5%25D7%25A5%25ED%25A5%25F3%25A5%25D7%25A5%25C8%25A4%25CE%25A5%25A8%25A5%25B9%25A5%25B1%25A1%25BC%25A5%25D7%25BB%25C5%25CD%25CD.html

PS > powershell " $a = get-date ; \"hello, world. $a \" "
hello, world. 01/01/2010 22:10:29

確かにできてるね
20名無し~3.EXE:2010/01/02(土) 23:24:11 ID:cTWRUUoK
なんか某所で突っ込まれた気がするので適当にまとめてみた
間違ってたら誰かフォローよろしこ

以下、コマンドプロンプトから powershell.exe の -command オプションに任意の文字列を渡してコマンドとして実行するときの話
・ 二重引用符 " は \ でエスケープする
・ | & < > は 奇数番目の二重引用符 " の後ろにある時は特別なエスケープ処置は必要はない
 偶数番目の二重引用符 " の後ろにある時は ^ を使ってエスケープする

CMD > powershell " \" hoge \" "
hoge


CMD > powershell " ' hoge > fuga ' "
hoge > fuga

> は奇数番目の二重引用符の後にあるので自動的にエスケープされる、出力結果は ' hoge > fuga '


CMD > powershell " \" hoge > fuga \" "

偶数番の二重引用符 " の後に > があるので、> がエスケープされずに
(コマンドプロンプトの)リダイレクト演算子として機能し
powershell.exe の出力結果 ' hoge ' が fuga というファイルにリダイレクトされる


CMD > powershell " \" hoge ^| fuga \" "
hoge | fuga

偶数番の二重引用符 " の後に | があり、| が二重引用符 " によってエスケープされないので
^ を使って | をエスケープする、出力結果は ' hoge | fuga '
21名無し~3.EXE:2010/01/09(土) 22:07:55 ID:06hUKofY
文法は面白いけどもっさり過ぎる
dirするだけでどんだけCPUパワー食ってんのかと
CPUが後2、3世代進んでから乗り換えるわ
22名無し~3.EXE:2010/01/10(日) 00:44:12 ID:O/OoSzS1
知れば知るほど、良い出来だなぁ

もう少し改良して欲しい点として、UnixスタイルのCTRL+U、CTRL+A、CTRL+Eの対応と。
コンソールの作りをTeraTermみたいにキーワードをマウスで選択右クリックでペーストとかなって欲しい。
左上のコンテキストメニューつかうの面倒くさいから。

New-ObjectあたりはnewにAlias割り当てて良いんでないかぁ
23名無し~3.EXE:2010/01/11(月) 07:45:26 ID:W7jRU6IE
PowerShellってインストールせずに使うことはできないのかなぁ。
powershell.exeだけコピーして動かそうとしたけどだめだった。
24名無し~3.EXE:2010/01/11(月) 11:14:40 ID:KTNXxzfc
>>21

Powershell用のプロパティが重いんだよね。(gi -l .).getfiles()とかを使えば軽い。
25名無し~3.EXE:2010/01/11(月) 16:31:48 ID:Kw3ZXtwI
powershellでiseみたいにread-hostでGUIにできない?
26名無し~3.EXE:2010/01/11(月) 20:07:43 ID:3OOLInNT
なんか似たような質問がちょっと前にもあったような
# [Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualBasic")
[Microsoft.VisualBasic.Interaction]::InputBox("以下に入力","タイトル","デフォルトの文字列")

それともpowershell.exe自体をRead-Hostコマンドを実行することで
ISEのようなGUIアプリの概観にするという意味じゃろか
27名無し~3.EXE:2010/01/12(火) 01:52:58 ID:3thoTjT8
get-credentialみたいに、GUIにするか、consoleにするか、のスイッチがあるかと
28名無し~3.EXE:2010/01/14(木) 23:32:28 ID:xZGgtzzJ
質問です。二重ループの内側で外側のオブジェクトどうやったら参照できますか?

dir -Recuse c:\temp | %{
cat $_ | % {
// $_の外側のForEach-Objectオブジェクト参照どうすればいいの?
}
}
29名無し~3.EXE:2010/01/14(木) 23:59:56 ID:QiX77Jae
別の変数に代入しておけばいいだけじゃん?
30名無し~3.EXE:2010/01/15(金) 00:53:18 ID:bgPwBRCA
シェルスクリプトの美しさっていうのか、
さりげないけど、高機能を多用してるのが気持ち良いノリってあるんだよなw
31名無し~3.EXE:2010/01/15(金) 03:21:28 ID:UC9TN4Xv
バッチファイルにシェルスクリプト・・・一番簡易で一番高度だもんげ
32名無し~3.EXE:2010/01/17(日) 22:01:51 ID:60xRBkvR
ところで次期VS2010では、PowerShellはメインストリームになるの?
やっぱシェルは開発で、ガシガシ使われてナンボではあると思うけど。
33名無し~3.EXE:2010/01/19(火) 00:58:11 ID:YuVXv+9y
Xml.Linqって便利だね、[xml]$xml = ... とかやるよりずっと楽
ttp://www.atmarkit.co.jp/fdotnet/special/linqtoxml/linqtoxml_02.html

Add-Type -AssemblyName System.Xml.Linq
$ex = [System.Xml.Linq.XNamespace]"http://www.piedey.co.jp/example/linqtoxml200811"
$doc = New-Object Xml.Linq.XElement $( $ex+"person";
(("name", "Wong Fei Fong"), ("age", "18"), ("address", "Village of Lahan") |
% { New-Object Xml.Linq.XElement $($ex+$_[0]; $_[1]) })
)
$doc.ToString()


Convert-Xmlの出力もこんな感じの方が嬉しいんだけどなー
34名無し~3.EXE:2010/01/22(金) 00:02:58 ID:YdI+bHOF
PSだけで殆どの業務アプリが作れるような感じがしてきた。
動的言語に近いから、PL/SQLとかT-SQLの置き換えに良いと思ったりする。
35名無し~3.EXE:2010/01/26(火) 18:45:01 ID:ZPqGt4/y
これつい先日使い始めたばかりなんだけど、ISEの出力をウィンドウに
合わせて改行とかどうやるの?
一行200桁以上とか見にくくて困るんだけど。
36名無し~3.EXE:2010/01/27(水) 01:17:12 ID:47cnnfMm
これってnetrisできるの?
37名無し~3.EXE:2010/01/28(木) 22:38:01 ID:OITvlY5l
>>35
アウトプットペインの話ならコマンド実行した時のウインドウサイズに合わせて出力されるよ?
サイズ変更した時に追従はしないけど
38名無し~3.EXE:2010/01/28(木) 23:05:09 ID:mN1k0K8A
>>37
その後何回かウィンドウサイズ変えてやってみたんだけど
赤文字のエラー文てウィンドウサイズの2倍位の位置で改行されてない?
半角80文字位のウィンドウサイズ幅で
存在しないコマンド入れてEnter押した結果

用語 'a' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記述されていることを確認し、パスが
含まれている場合はそのパスが正しいことを確認してから、再試行してください。
発生場所 行:1 文字:2
+ a <<<<
+ CategoryInfo : ObjectNotFound: (a:String) []、CommandNotFoundExcep
tion
+ FullyQualifiedErrorId : CommandNotFoundException

改行位置は原文まま。半角157文字で改行入ってるし。
わけわからん。
39名無し~3.EXE:2010/01/29(金) 00:29:03 ID:gkvs4EXV
>>38
ああ、エラー文だとそうなるみたいだね
40名無し~3.EXE:2010/02/05(金) 00:06:50 ID:qu9FtZMu
たしかに、PowerShellのエラー表示はちょっとUnixとか汎用機のものとも違って、
ちょっとヘンテコだよね。
41名無し~3.EXE:2010/02/06(土) 16:32:03 ID:7MX3qEFM
1.0の時に合ったクイックリファレンスのドキュメントはどこかに行っちゃったんだな、ふむ。
42名無し~3.EXE:2010/02/06(土) 17:59:47 ID:0Imoozjb
>>41
インストールフォルダの中にテキストがいっぱいありますよ?
43名無し~3.EXE:2010/02/06(土) 18:14:39 ID:7MX3qEFM
>>42
いや俺がしたいのは1.0のquadfold.rtfに相当するドキュメントはなくなっちゃったんだねってことよ?
今でも↓から入手はできるけどね
ttp://www.microsoft.com/downloads/details.aspx?FamilyId=B4720B00-9A66-430F-BD56-EC48BFCA154F&displaylang=en
別に取り除く必要はなかったように思うわけさ
44名無し~3.EXE:2010/02/06(土) 19:45:06 ID:44gaNFno
>>40
君の日本語もヘンテコだが…
45名無し~3.EXE:2010/02/06(土) 21:00:06 ID:RW7gxJxl
なにかのオブジェクトで、GetClosurerだったかNewClosurerみたんだけど、
高階関数つかるのこれ?
46名無し~3.EXE:2010/02/07(日) 00:58:26 ID:B59r12L7
>>45
GetNewClosure()というメソッドでスクリプトブロックのクロージャを生成することは出来るよ
ttp://blogs.msdn.com/powershell/archive/2009/03/27/get-closure-with-getnewclosure.aspx
別にノーマルなスクリプトブロック使っても高階関数自体は作れると思うけど
47名無し~3.EXE:2010/02/07(日) 22:07:12 ID:5nvhuGiB
format-tableについて教えください

コマンド結果の全プロパティを見たいとき以下のように打ったとします
PS C:\> ls | ft *

結果、省略表示されますが省略しすぎてとても何が返ってきてるのか分かりません
そこでautoオプションつけますがこれはこれで
収まらない分は削除されてしまいます。リダイレクトしてファイルに吐いても同じです。

PS C:\> ls | ft * -auto
「警告: 18 個の列が表示に収まらないため、削除されました。」

全行を省略しない形で表示できないでしょうか?
48名無し~3.EXE:2010/02/07(日) 22:24:20 ID:zX92p1FY
PowerShellの画面バッファ/ウインドウのサイズを十分に大きく/フォントを小さく設定/解像度の大きいモニタを使う
ls | select * | ogv として別ウィンドウに表示
ls | Export-Csv としてCSVファイルに保存してからエクセル等で表示する

の、どれか。
49名無し~3.EXE:2010/02/09(火) 00:51:28 ID:YNN/Dh1h
PowerShellは殆どの演算子をハイフンで始まる文字列に押し込めたから
^ とか ~ とかが何にも解釈されない文字として残ってるけど
これを利用して 3^3 で塁乗、 9~2 で累乗根、とかできるようにして
他の追随を許さない電卓言語として君臨、とかならんかな、いやならんでいいけど
50名無し~3.EXE:2010/02/09(火) 01:40:39 ID:kaRTV0fr
その辺はエイリアスで勝手にどうぞなんじゃない?
それよかスタティックなメンバーをカッコ書きで格納面倒だけど。

$date=[System.DateTime]::Nowとか
スクリプトだからしょうが無いかもしれないけど、名前空間とリファレンスを参照するキーワードが欲しいけな。。
51名無し~3.EXE:2010/02/09(火) 04:14:39 ID:8BqPaL3i
ogvが閉じるのを待ち合わせるにはどうすりゃいいの?
52名無し~3.EXE:2010/02/10(水) 00:00:44 ID:yDsRur2e
フォルダ内の検索オプションですが、例えば今日の20時以降に
更新・作成されたファイルをリストアップしたいのですが
標準では年月日までしか日時指定できません。

時間まで指定する方法はありますでしょうか?
53名無し~3.EXE:2010/02/10(水) 00:15:29 ID:LYLYPZIx
そんなことはない
54名無し~3.EXE:2010/02/10(水) 01:06:40 ID:Wzvkwo8/
date:>2010/02/09 20:00
55名無し~3.EXE:2010/02/11(木) 00:19:43 ID:uGcl0aGn
>>52

get-date 20:20

とかを試してみるべし。
5652:2010/02/11(木) 01:11:49 ID:LhylZmK1
>54,55

ありがとうございます。早速やってみます。
57名無し~3.EXE:2010/02/12(金) 00:48:23 ID:mUwODAF1
>>38
このエラーメッセージをそのまんま変数に取り出せない?
なぜか改行までしか取れないだけど
58名無し~3.EXE:2010/02/13(土) 00:45:36 ID:lHDHi4mb
>>48
ls | convertto-html | out-ie
59名無し~3.EXE:2010/02/13(土) 18:37:17 ID:gjDR5Xyk
>>58
や、俺にレスされても困るがな
60名無し~3.EXE:2010/02/14(日) 22:24:42 ID:OE9upvDA
>>50
PSObjectにAdd-Memberで特定の型の静的メンバをくっ付けて行くことで対処できないことはない
例えば[DateTime]を対象とすると

$typename = "datetime"
$arglimit = 20
$argtext = (1..$arglimit | % { $n = $_.ToString('00'); "`$myarg$n=(`$_iranaiko+=,'myarg$n')"} ) -join ', '

iex "`$$typename = New-Object psobject"
iex "[$typename] | gm -s -MemberType Method" |
% {
$exp = @"
{param($argtext);
Remove-Variable `$_iranaiko ;
`$argtext = (gv myarg* -Scope Local | % { '$' + `$_.Name }) -join ', '
iex "[$typename]::$($_.Name)(`$argtext)"
}
"@
$sb = iex $exp
iex "`$$typename | Add-Member ScriptMethod $($_.Name) -Value `$sb -force"
}


$datetime.DaysInMonth(2, 5)

とかそんな感じで
61名無し~3.EXE:2010/02/18(木) 09:28:28 ID:9EMy/ABM
 
62名無し~3.EXE:2010/02/23(火) 01:31:48 ID:1YrNYLaH
変数に格納した文字列をあいまい検索する場合
後からアスタリスクを追加するにはどうすれば良いでしょうか?

●作成したいスクリプト
「c:\移動元」 ディレクトリ内にOS名が付いたファイルがたくさんあります。(yyyy_Windows_xxxx.xlsとかで命名規則はバラバラです)
これを「c:\移動先」 ディレクトリの同会社名ディレクトリに選別して移動するスクリプトを作成しようとしています。
ディレクトリは↓のイメージです

C:.
├─移動元
└─移動先
├─Windows
├─Linux
・・・

●作成中のスクリプト
==============================================
$SORUCEPATH = "c:\移動元"
$DESTPATH = "c:\移動先"
$SERCHFILE = ls $DESTPATH | select-object name

foreach ($SERCHSTR in $SERCHFILE) {
$j = join-path $DESTPATH $SERCHSTR
$SERCHSTR = *$SERCHSTR* #←ココ●
ls $SORUCEPATH -include $SERCHSTR -recurse | foreach ($_) {move $_.fullname $j -whatif}
}
==============================================

結局↓のコマンドのようにしたいのですがどう記述すればよいのでしょうか?
ls c:\移動元 -include "*Windows*" -recurse | foreach ($_) {move $_.fullname $j -whatif}
6362:2010/02/23(火) 01:33:41 ID:1YrNYLaH
>>62
すいません。ズレてしまいましたが

「c:\移動先」ディレクトリの配下に「Windows」「Linux」ディレクトリが存在します
64名無し~3.EXE:2010/02/23(火) 02:20:44 ID:+27C+XO0
>>62
多分こんな感じでいいんじゃなかろうか
$DESTPATH = "R:\Dest"
$SORUCEPATH = "R:\src"
ls $DESTPATH -Name | % { cd $DESTPATH\$_; ls $SORUCEPATH\* -In *$_* | move -dest .\ }
65名無し~3.EXE:2010/02/23(火) 02:35:38 ID:+27C+XO0
ああいやまあ-Destの方で指定すればcdする必要ないんだけども
66名無し~3.EXE:2010/02/23(火) 02:49:32 ID:+27C+XO0
ふむ、タブファイラで渦中のフォルダを3分割表示して
1..10 | % { ls $DESTPATH -Name | % { ls $SORUCEPATH\* -In *$_* | move -dest $DESTPATH\$_ } ; sleep 2
move $DESTPATH\*\* -In *.txt -Dest $SORUCEPATH; sleep 2 ; }
とかやるとなかなか楽しいな、なんかのデモに使えそう
67名無し~3.EXE:2010/02/25(木) 03:00:10 ID:MgBHCeg/
よく見たら2回もlsする必要なかった
ls $DESTPATH | % { move $SORUCEPATH\*$_* $_.FullName }
なんかもっと短く出来そうな、出来なさそうな
68名無し~3.EXE:2010/02/28(日) 22:15:03 ID:XKMuyjdJ
>>64-67
ありがとうございました。以下でうまく行きました

$SORUCEPATH = "c:\移動元"
$DESTPATH = "c:\移動先"
ls $DESTPATH -Name | % { ls $SORUCEPATH\* -In *$_* | move -dest $DESTPATH\$_ -whatif}
69名無し~3.EXE:2010/02/28(日) 23:08:19 ID:5Re/biwD
スクリプト本体と関係ないが
soruceはわざとなのかい?
70名無し~3.EXE:2010/03/11(木) 23:41:41 ID:EcUmhI6o
1.0の話ってスレ違い?
誰か教えてください。

今日1.0を入れたら、PowerShell起動時に80ポートを開いて116.91.142.191と225に接続しようとしたんだけど、
これって正常な挙動?

2.0に入れ替えたらこの挙動はなくなりました。もしかしてウイルスにやられてるのかな?
71名無し~3.EXE:2010/03/12(金) 06:29:38 ID:0fQ7pB7I
>>70
あんたのISPはvectantだろ
72名無し~3.EXE:2010/03/12(金) 18:52:42 ID:nXoZFSL8
>>71
違うISPです。
73名無し~3.EXE:2010/03/13(土) 04:27:52 ID:dTKQVsL3
cmd.exeあたりはどこかでバッサリ捨てて欲しいな
74名無し~3.EXE:2010/03/13(土) 04:35:32 ID:dEw65YIY
64bit Windowsでcommand.comは消えた
cmd.exeも同じくらいの時間をかけて消えるのかもしれないね

Windows PowerShellはcmd.exeやWSHで使うVBScript、JScriptをどこまで
置き換えるんだろう
75名無し~3.EXE:2010/03/13(土) 08:08:20 ID:rZpSpC8V
>>73-74
WindowsMEを目指すのかwww
Windows上からDOS窓は使えたけど

telnet接続もcmdベースじゃなかったか?
76名無し~3.EXE:2010/03/13(土) 09:39:55 ID:jsj7aNy2
>>75

PowershellからでもSystem.Net.Sockets.TcpClientあたりを使えばいいが。
77名無し~3.EXE:2010/03/13(土) 13:43:45 ID:ACRf1yd6
vista x64 sp2 無印rtmから再インストールしてSP2までアップグレードした後に
PowerShell1.0をWindowsUpdateで入れてみたけどやっぱり116.91.142.191にアクセスが発生する。

クリーン環境でも発生したから結局問題なかったんだ、と思うことにします。
一晩かかって疲れた。
78名無し~3.EXE:2010/03/13(土) 14:55:25 ID:qtbTmgoE
>>76
クライアント側じゃなく鯖側
79名無し~3.EXE:2010/03/13(土) 19:03:36 ID:K8eUwN3I
>>75
CLIベースの実行ファイルをcmdベースって言ったら、それこそPowerShell自体がって話になるんでは。
80名無し~3.EXE:2010/03/14(日) 08:50:49 ID:Hn6lpQ4x
>>78

意味不明だ。telnet鯖は鯖だよ。
81名無し~3.EXE:2010/03/17(水) 00:49:46 ID:tSysGR3U
1,2,3,4,5|Export-csv -path "abc.csv"
ってやったら、
abc.csvの内容が
#TYPE System.Int32
と出ました。
どうして"1,2,3,4,5"にならないのでしょうか?
82名無し~3.EXE:2010/03/19(金) 01:13:11 ID:0GOIRcmZ
>>81
System.Int32型のプロパティをCSV形式にしてるから(プロパティないから改行だけになる)。
ていうか、そのやり方ではできたとしてもせいぜい
"1"
"2"
"3"
...
みたいな出力しか期待できんだろ
-join 使えばいいじゃん
83名無し~3.EXE:2010/03/23(火) 21:42:43 ID:lViYlT5s
 
84名無し~3.EXE:2010/03/24(水) 00:51:08 ID:39fJFkBP
一発ネタ
コマンドプロンプトの環境変数表記を使えるようにする
ls env: | % { iex "function $(`"%`" + $_.Name + `"%`") { `$env:$($_.Name) }" }

うん、それだけなんだ、すまない
85名無し~3.EXE:2010/03/28(日) 21:35:22 ID:omxsl1A9
PowerShellのTransaction系の実装には期待している。
一貫性を保障出来るならかなり良い思うんだけど。

86名無し~3.EXE:2010/03/29(月) 15:07:15 ID:Q1Sfkfug
ieコンポーネントを使ってgoogleを開き、キーワードを入力して検索する。
検索結果を10ページ分、名前を付けてhtml形式で保存する。
この操作をPowerShellで可能なのでしょうか?
可能であればサンプルコードを見せてもらえるとうれしいです。
87名無し~3.EXE:2010/03/29(月) 16:23:35 ID:c3UokA9g
一人月で開発してやるよ
88名無し~3.EXE:2010/03/29(月) 17:45:56 ID:SREk3yP3
生産性悪そうだから単金百円で
89名無し~3.EXE:2010/03/29(月) 21:43:52 ID:DGg0sZd4
仮に・・・
裏がPowerShellやDosコマンドで、UIは他言語でアプリを作るとしたら何が良いのでしょうか?VB?
90名無し~3.EXE:2010/03/29(月) 23:50:28 ID:SREk3yP3
UIもPowerShellで作ればええじゃないか
9189:2010/03/30(火) 00:10:53 ID:is44HdHL
見た目はビジュアル重視で行きたいです。
92名無し~3.EXE:2010/03/30(火) 00:26:39 ID:dq4fBvef
だったらVisualBasicだね
93名無し~3.EXE:2010/03/30(火) 01:38:29 ID:klchKT8i
Add-History は CSV 形式にすれば好きなコマンドをヒストリに追加できる
Invoke-History はコマンドを実行する前に実行するコマンドを画面に出力する

というわけでバッチファイルのように自分自身を読み上げながら実行するスクリプト思いついた
------------------------------------------------------------------------------------
(type $MyInvocation.MyCommand.Path) | select -Skip 7 | % -Begin { @'
#TYPE Microsoft.PowerShell.Commands.HistoryInfo
"Id","CommandLine","ExecutionStatus","StartExecutionTime","EndExecutionTime"
'@
} { '"0","{0}","Completed","0001/01/01 0:00:00","0001/01/01 0:00:00"' -f $_ } | ConvertFrom-Csv | Add-History
((h)[-1].Id-((type $MyInvocation.MyCommand.Path).count-8))..(h)[-1].Id | % -Begin {$i=1} { "#"*30 + ("`tBegin`tCommand:{0,3}" -f $i++) + "#"*30 ; Invoke-History -Id $_; "#"*30 + ("`tEnd`tCommand:{0,3}" -f $_) + "#"*30 }
return # ここまで7行

# 実行したいスクリプト
ls
ps
------------------------------------------------------------------------------------

まあプロンプトは出てこないから自分で装飾する必要があるんだけどもー
9489:2010/03/30(火) 20:35:57 ID:is44HdHL
>>92
じゃVBで行って見ます。
95名無し~3.EXE:2010/04/02(金) 01:16:28 ID:M7yf1HAI
PowerShellさっさとWin2008 Serverに載せてればよかったんだけど・・・
V3いつリリースされるかわからないけど、
日本じゃ、これってサーバ製品に普通に標準で乗らないと一向に普及しないよな。
96名無し~3.EXE:2010/04/02(金) 01:52:23 ID:mAo1182s
2008は標準搭載(ただし要有効化)、2008R2から標準インストールされてるがな
97名無し~3.EXE:2010/04/04(日) 18:45:51 ID:mHgJVGPO
うがー、コンソールアプリはフック効かないって分かったらここ2日くらい悩んでたのが全部無駄になった気分だ・・・
cmd.exeのマウスでコピーとかはWinAPI使わない独自実装なんかな
98名無し~3.EXE:2010/04/05(月) 17:31:16 ID:zMWhVMNd
バッチファイルをバックグラウンドで走らせたいのですが
$cmd={& "C:\hoge\hoge.bat"} ; Start-Job -ScriptBlock $cmd
はOKでしたが、
$bat = "C:\hoge\hoge.bat"
$cmd={& $bat} ; Start-Job -ScriptBlock $cmd
はNGでした。
うまい書き方はないですか?
99名無し~3.EXE:2010/04/05(月) 18:02:36 ID:zBwMa85m
Start-Process -FilePath $bat -NoNewWindow

とするか

iex "`$cmd={& $bat}"

とするか

$cmd={param($bat); & $bat}
Start-Job -ScriptBlock $cmd -ArgumentList $bat

とするかくらいだと思うよ
100名無し~3.EXE:2010/04/06(火) 06:19:49 ID:Q597yQV9
>>99
ありがとう。
iex "`$cmd={& $bat}"
でOKでした。
101名無し~3.EXE:2010/04/06(火) 21:17:25 ID:Q597yQV9
バックグラウンドでは Write-Progress の表示が見えないのですが、
フォアグラウンドのコンソールにリダイレクトする方法はありますか?
102名無し~3.EXE:2010/04/07(水) 07:24:13 ID:WHeSRl1y
>>101
バックグラウンド処理は別プロセスだからホスト側のプロセスには影響しない
というか、Write-Progress使うならバックグラウンドでやる意味がないと思うんだが・・・
中の処理で進行度の数値を出力してReceive-Jobで拾って、
(ホスト側の)$host.ui.rawui.windowtitleに入れてタイトルバーで表示するくらいじゃね
103101:2010/04/07(水) 13:52:54 ID:z101cFdY
>>102
よく考えたらバックグラウンドのプロセスが画面持ってるのはおかしいですよね
その方法で試してみます。ありがとう。
104名無し~3.EXE:2010/04/08(木) 17:28:16 ID:wGCuH+p3
powershellでGUI書いてみたんですが、ビジュアルスタイル?が適用されない様で困っています

PowerGUIから実行する場合は問題ないんですが、シェルからだと例えばボタンの上にカーソル持っていっても
ハイライトされないんです
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")
で読み込んでるdllは同じなんですが、何が違うのか見当がつきません
有識者の方、御教示お願いします
105名無し~3.EXE:2010/04/09(金) 10:10:20 ID:pUS39GQq
Format-List の出力を行単位で取り出すにはどう書けばいいですか?
> Get-ChildItem .\hoge.txt | Format-List | foreach {echo "[" $_ "]" }
[
ディレクトリ: C:\hoge
]
[
Name : hoge.txt
Length : 9
CreationTime : 2010/04/09 9:59:24
LastWriteTime : 2010/04/09 9:59:48
LastAccessTime : 2010/04/09 10:03:44
VersionInfo : File: C:\hoge\hoge.txt
InternalName:
OriginalFilename:
FileVersion:
FileDescription:
Product:
ProductVersion:
Debug: False
Patched: False
PreRelease: False
PrivateBuild: False
SpecialBuild: False
Language:
]
...
この Name Length を一行ずつ取り出したいのですが。。。
106名無し~3.EXE:2010/04/10(土) 02:54:20 ID:s6LqoGGj
>>104
ソース見ないとなんともだな

>>105
素直に Format-List Name, Length って書けばいいだけに見える
107名無し~3.EXE:2010/04/10(土) 14:47:57 ID:qVX8w621
特定のアプリケーションを強制終了させて、再起動させて、特定のボタンを押す。
というのを3時間周期で行わせたいのですが、こんなことってPowerShellでできますか?
WHSのほうがいいの?
108名無し~3.EXE:2010/04/10(土) 21:21:06 ID:QO8LRa4k
>>107

WASP
109名無し~3.EXE:2010/04/10(土) 22:19:25 ID:Ii5m8hz2
MSのサーバ製品、PowerShell経由で操作するように組み換えが進んでるよな。
110名無し~3.EXE:2010/04/11(日) 07:40:01 ID:C/2m2OR4
>>107
後は定期実行はタスクスケジューラに登録すれば何使ってもできる


余談だけどUIAutomationがPowerShellから直接は使えないってのは2.0でも直ってないんだな
111名無し~3.EXE:2010/04/11(日) 09:00:14 ID:UY8Q58om
特定のボタンを押す動作を自動化する方法がわかりません。
Windowsをアクティブにして、ボタンが3個目だとしたら、TABに相当するコードを
SendMessageすると良いと思うのですが、どうコーディングすれば良いのでしょうか?
112名無し~3.EXE:2010/04/11(日) 09:02:00 ID:UY8Q58om
>>111
あ、少し文章が抜けてました。
「TABに相当するコードを3回Sendmessageして、クリックに相当するコードをSend」
113名無し~3.EXE:2010/04/11(日) 10:54:06 ID:C/2m2OR4
>>111
WASP使ってみた?
ttp://wasp.codeplex.com/Wikipage

ボタンとして認識できれば、例えばこんな感じでできるはず
Select-Window プロセス名 | Set-WindowActive | Select-Control 押したいボタンに書かれてる文字 | Send-Click
114名無し~3.EXE:2010/04/13(火) 11:50:44 ID:Iz73pvAK
リンク切れ

01.インストール : PowerShell V2
"セットアップファイルの入手

 セットアップファイルは下記から入手することが出来ます。

http://www.microsoft.com/downloads/details.aspx?FamilyID=c913aeab-d7b4-4bb1-a958-ee6d7fe307bc&displaylang=en"

http://hiros-dot.net/psv2/introduction/install/install1.htm
115名無し~3.EXE:2010/04/13(火) 15:08:10 ID:Uap0i9xz
> "a`r`nb".split("`r`n")
a

b
> "a`r`nb".split("`r`n").count
3
> "a`r`nb" -split "`r`n"
a
b
> ("a`r`nb" -split "`r`n").count
2

ハマったぜ。。。
116名無し~3.EXE:2010/04/13(火) 18:46:12 ID:Uap0i9xz
function f
{
Write-Host $args.length
foreach ( $i in $args)
{
write-host $i
}
}
$opt = "1 2 3"
f $opt
--
1
1 2 3

引数をばらす方法ないですか?
--
3
1
2
3
117名無し~3.EXE:2010/04/13(火) 22:33:14 ID:GnqUuY0v
>>115

String.Split(Char[])
である。

"`r`n"はStringではなく、Char[]として解釈され、"`r"または"`n"で文字列を区切った
String[]を返す。"`r"と"`n"の間には何もないのだから、nullとなる。

PS> "a`r`nb".split("`r`n")[1] -eq "`0"
true
118名無し~3.EXE:2010/04/13(火) 22:36:45 ID:6bjeZuM3
>>115
-split 演算子は String.Split ではなく Regex.Split のラッパー
[Regex]::Split("a`r`nb","`r`n" )

>>116
"1 2 3" という文字列を渡してるのにばらけるわけなかろう
$a=1,10,20 という配列を作った後、分配演算子@を使って
& { $args.Count; $args } @a というふうに渡すことはできる
119名無し~3.EXE:2010/04/14(水) 11:44:05 ID:rEUM1djO
>>116
iex "f $opt"
120名無し~3.EXE:2010/04/14(水) 14:05:36 ID:rEUM1djO
PS> function f { $args.length; $args }
PS> f -
1
-
PS> f --
0
PS> f ---
1
---
PS> f "--"
1
--

hmm...
121名無し~3.EXE:2010/04/14(水) 14:41:42 ID:+TjhqZdm
regular syntax
command [-options...] [--] [arguments...]
122名無し~3.EXE:2010/04/14(水) 15:33:48 ID:rEUM1djO
-- は渡してくれないのね
自前でオプション解析しようと思ったら - 以外を使わんといかんな
123名無し~3.EXE:2010/04/14(水) 22:25:29 ID:TkMKnc/G
S
124名無し~3.EXE:2010/04/14(水) 22:30:43 ID:TkMKnc/G
諸先輩方に変数の展開について質問です
例えばスクリプト内で以下のようにコマンドを実行させたいのですが

> java -version

このようにするとうまくいきません

> $str = "sion"
> java -ver$str

こうするとうまくいくのですが

> $str = "version"
> java -$str

なぜでしょうか?
こんな面倒なことをわざわざしたいのではなく
スクリプトの中で変数を多用しているため
結果的にそうなったということなのですが・・・
125名無し~3.EXE:2010/04/15(木) 09:01:24 ID:pdomDtC+
>>124

「-$str」の「-」は演算子として解釈されるからだ。

PS> $c = 2
PS> -$c
-2

文字列には「-」で行える演算がない。「-」を文字として扱いたいならば、次のようにやればいい。

PS> $str = "version"
PS> java "-$str"
java version "1.6.0_18"
Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)
126名無し~3.EXE:2010/04/15(木) 20:22:11 ID:Fg5y7IZM
>>125
ありがとうございます

> $str = "sion"
> java "-ver$str"

で解決しました.
PSは高級なバッチファイルとして使っていたいたのですが
この仕様はちょっと不便というかなんというか

バッチファイル代わりに使うことが
そもそも間違っているのかもしれないですが
127名無し~3.EXE:2010/04/16(金) 00:15:32 ID:Dtr+HV6k
basicではストリング変数ってa$と、$が変数名の後ろにあったはずだが、
秀丸マクロの真似したのかね?
128名無し~3.EXE:2010/04/16(金) 07:25:38 ID:bNu/bwoq
>>127

むしろ、Perlでわ?
129名無し~3.EXE:2010/04/17(土) 14:56:45 ID:iUltzkHe
awkだろ
130名無し~3.EXE:2010/04/17(土) 15:03:03 ID:CFCnR5aa
ふつうにshからだろ
131名無し~3.EXE:2010/04/17(土) 17:44:26 ID:iUltzkHe
sh変数代入で$使わない
132名無し~3.EXE:2010/04/18(日) 01:42:53 ID:fgav3gbL
こんなオプションあったんだねぇ
別にprofile.ps1に各自書き込むでもいいような気がするが

Missing PowerShell.exe switch
https://connect.microsoft.com/PowerShell/feedback/details/552065/missing-powershell-exe-switch

133名無し~3.EXE:2010/04/20(火) 22:54:55 ID:Bp+yTs8R
あれ、PowerShell ISEでもchcpコマンド有効なんだ

PS > chcp
現在のコード ページ: 932

PS > [Text.Encoding]::UTF8.GetBytes("テスト:UTF8 ON POWERSHELL")| sc -enc Byte r:\utf8.txt

PS > cmd /c 'type R:\utf8.txt'
繝・せ繝茨シ夲シオ・エ・ヲ・・・ッ・ョ ・ー・ッ・キ・・・イ・ウ・ィ・・・ャ・ャ



PS > chcp 65001
Active code page: 65001

PS > cmd /c 'type R:\utf8.txt'
テスト:UTF8 ON POWERSHELL


これだとcmd.exeみたいに表示だけじゃなく日本語入力も普通にできる
134名無し~3.EXE:2010/04/20(火) 23:23:01 ID:Dtic/A0c
v2で話題のpowershell面白いな
wsusを管理するコード、他言語に移植する方法が分からんし
これで行くわ
勉強不足が身にしみるこのごろ
135名無し~3.EXE:2010/04/21(水) 01:01:38 ID:1lMH3tjx
PowerShell面白いよな。
それからCMD.EXEしかしらないバカどもを早く一掃してほしい。
136名無し~3.EXE:2010/04/21(水) 01:56:08 ID:YqB6HzOq
command.comしかわかりません><
137名無し~3.EXE:2010/04/21(水) 07:12:49 ID:iOp7hIHN
ほんとは、追加インストールが発生しない
vbscriptの方がいいに決まってる(ような気がするが)
リモート機能も強化されたし、試してみるわ
138名無し~3.EXE:2010/04/22(木) 01:51:21 ID:skW+f+mH
cmdから移行中なんだけど
ps1ファイルをコマンドラインから実行するのってどうやるの?

mycmd.ps1があって
>mycmd
と打つだけで実行できるようにしたい。
とりあえずpathextには追加したけどあとがよく分からない。
139名無し~3.EXE:2010/04/22(木) 13:03:04 ID:BDO7j1vb
140名無し~3.EXE:2010/04/28(水) 12:42:10 ID:KdgEBEan
 
141名無し~3.EXE:2010/05/01(土) 02:28:55 ID:VnvHJTPU
RubyからScalaに乗り換えた15くらいの理由
ttp://wota.jp/ac/?date=20100426#p01

こうして見ると随分PowerShellって言語仕様充実してるんだな
142名無し~3.EXE:2010/05/01(土) 20:22:36 ID:Xre7Udvb
F#ってどうよ
143名無し~3.EXE:2010/05/01(土) 21:09:18 ID:gE8QYFFq
PowerShellはかなりいい出来だよな。
2.0になってリモートコールもできるしサーバ管理は楽になったんじゃないの
もうちょっとコマンドレットが覚えやすいといいんだけどね。

マクロの記憶じゃないけど、GUIから操作した結果をコマンドレットを取得できるような仕組みがあると良い
144名無し~3.EXE:2010/05/02(日) 00:35:39 ID:X4eUIgxV
Exchangeとかのサーバー製品はそんな感じだね
145名無し~3.EXE:2010/05/02(日) 13:12:05 ID:O3PUj0U0
Exchangeあたりのコマンドレットはオプションありすぎで、やや扱いにくい。
まぁしょうがないかもだけど
146名無し~3.EXE:2010/05/02(日) 13:15:15 ID:h326HOPJ
慣れの問題だよ
147名無し~3.EXE:2010/05/03(月) 09:30:57 ID:jR1qyiHO
ここ見てPowerShellを.NET 4.0で動くようにしてみた
ttp://stackoverflow.com/questions/2094694/launch-powershell-under-net-4

Get-ChildItemがチートされてたのと、ISEフォントが滲まなくなったので、俺大歓喜
148名無し~3.EXE:2010/05/03(月) 11:02:06 ID:jR1qyiHO
う〜ん、単純に↓を速度比較すると(cmd.exe起動終了のロスはあるにしても)完全に逆転してるなぁ・・・
.NET4.0おそロシア
cmd /c "dir c:\ /s/b"
[IO.Directory]::EnumerateFileSystemEntries("C:\", "*", "AllDirectories")
149名無し~3.EXE:2010/05/03(月) 11:47:30 ID:fnTpC8sm
.NET4に対応したPowerShellてそのうちリリースされるん?
150名無し~3.EXE:2010/05/03(月) 15:41:12 ID:i9nVnGyI
>>149
今の状態でも>>147にある通りレジストリ設定すれば.NET4で動くよ
151名無し~3.EXE:2010/05/03(月) 16:22:13 ID:WSFaNxwg
ps2って拡張子.ps2なの?
152名無し~3.EXE:2010/05/03(月) 16:52:05 ID:i9nVnGyI
うんにゃ、ps1のままだよ
153名無し~3.EXE:2010/05/03(月) 19:06:50 ID:AVtpFLY0
powershellってMacOSで言うターミナルみたいなもの?
「Windowsってコマンドプロンプトだろ?プププ」みたいなことをマカーに言われたけど、実はpsならターミナルよりすごい?
154名無し~3.EXE:2010/05/03(月) 19:11:01 ID:AVtpFLY0
↑に追加
ターミナルってなんと言うかtelnetとかviとかMacPortsとかいろいろ使えて、ただのシェルスクリプト環境だけじゃない総合的なCUI環境というイメージ(あくまでも使ったこと無いのでイメージ)だけど、それに匹敵するもの?
それともpowershellってシェルスクリプト部分だけがすごいの?
無知ですまんが教えてください
155名無し~3.EXE:2010/05/03(月) 19:30:06 ID:xcTd/iME
キャラクタベースなんて時代遅れ。
psはオブジェクトベースです。

という建前。
156名無し~3.EXE:2010/05/03(月) 19:30:10 ID:4lqyciuh
>>147 のはPS以外の.NETプログラム(Paint.NETとかRadeonのコンパネとか)にも
強制的にCLR4.0を使わせる物。
PowerShellだけなんとか…と思ったらこんなのがあった。
HKLM\Software\Microsoft\PowerShell\1\PowerShellEngine
の RuntimeVersion を
v2.0.50727
から
v4.0.30319
に書き換えるとPowerShellがCLR4.0を使うようになる。
でもISEは2.0のまま。どこに設定あるんだ…。
157名無し~3.EXE:2010/05/03(月) 19:30:46 ID:WSFaNxwg
>>152
ありがとう。

PS自体のバージョンに関係なく、言語仕様が大幅に変更され互換性が維持できなくなるまで1のままってことなのかな。
拡張子にバージョンにいれるのってあんまり意味ない気がするな。
158名無し~3.EXE:2010/05/03(月) 20:10:34 ID:i9nVnGyI
エイリアスフォントが使えるようになって初めてISE使ってみよっかなって思った香具師の数 ノシ
これでFixedSysが使えればもう何も文句ないな


>>156
>>147のところに併せて書いてある$psHome\powershell_ise.exe.configを作れって話で
<supportedRuntime version="v4.0.30319" />
にしたら動いたよ
159名無し~3.EXE:2010/05/03(月) 21:00:01 ID:W6wdXkQC
>>154
何を言ってるのかわからんが、コマンドプロンプトでもtelnetもvim(自分で入れれば)も使えるよ
yumやMacPortsのようなパッケージシステムは基本的にない
対話型シェルとしては十分高機能
160名無し~3.EXE:2010/05/03(月) 21:08:42 ID:4lqyciuh
>>158
なんか手法がside-by-sideみたいなやっつけ仕事的で嫌だなぁw
161名無し~3.EXE:2010/05/03(月) 21:45:32 ID:i9nVnGyI
>>160
試しに$psHome\powershell.exe.configを作って同じようにバージョン指定したら
powershell.exeもconfig側の設定に従うようになった
あくまでもPowerShellのデフォルトを設定するのがレジストリのPowerShellEngineなのかも、そうじゃないのかも

というかこの辺りは2,3年前に公式ブログで言っていたような気がするような、しないような
162名無し~3.EXE:2010/05/03(月) 23:54:48 ID:1Dncdezy
>>157
UNIXを少しでも使う人であれば
PSと言えばPostScriptを連想するはず
敵対(?)フォーマットを潰すべく
PostScriptに喧嘩を売っているような
でも実はそこまで勇気はなくて拡張子をps1としたような
なんか微妙・・・と思うのは俺だけ?

個人的には.psと紛らわしいのであんまり好きじゃない
163名無し~3.EXE:2010/05/04(火) 00:05:36 ID:YTxCzC0Z
Windowsで、PostScriptつかってる輩はすくないとおもうが
なんでPS1にしたんだろうね。
164名無し~3.EXE:2010/05/04(火) 00:34:44 ID:2Ao35uaC
PSで思い浮かぶのはPlayStationとかPS/2端子とかじゃね
PostScriptとか(TeX並みに)何年も聞いてないわ
165名無し~3.EXE:2010/05/04(火) 08:51:35 ID:Aze2SaAV
.psh にしろよと思ったけど既に変なアプリで使われてるのか
拡張子もwell-knownポート並みに狭苦しい世界だな
166名無し~3.EXE:2010/05/04(火) 08:54:34 ID:8rzEvCav
.windowspowershellscriptfile

でいいんじゃない?
167名無し~3.EXE:2010/05/04(火) 12:26:17 ID:2Ao35uaC
んじゃwpsで…と思ったらMicrosoft Worksですか。
# Workplace Shellとか思い浮かべたらオッサン。
168名無し~3.EXE:2010/05/04(火) 18:54:17 ID:+9czDxOY
.ps1の1はバージョンを指してる訳じゃないのかもしれない
169名無し~3.EXE:2010/05/04(火) 22:05:46 ID:+1R8fawb
powershellでMS DHCPをコントロールする方法が見つからない
フィルタをインポートするツールは落ちてるのに
PSで実施する方法が出てない
MSDNのどこかにありますか?
170名無し~3.EXE:2010/05/05(水) 02:13:24 ID:4NtCtyvS
みるみるの(キリッかわいいよみるみるううう
171名無し~3.EXE:2010/05/05(水) 02:15:04 ID:4NtCtyvS
あ、ごめん誤爆
172名無し~3.EXE:2010/05/11(火) 23:44:53 ID:YPiBSwhe
Group-Objectってあらゆるオブジェクトに対する重複削除にも使えるな・・・やはりGroup-Objectは素晴らしい
173名無し~3.EXE:2010/05/12(水) 02:09:19 ID:zUE6ikTV
GUIデバッガマダー
174名無し~3.EXE:2010/05/12(水) 05:35:03 ID:WwXi9ysC
Windows2008r2に付いてきてるあれは?
使った事ないけど
175名無し~3.EXE:2010/05/12(水) 05:43:47 ID:WwXi9ysC
Excelヘルプ並みのヘルプを付けてくれると普及すると思うんだが
開発系ツールだからダメなのか
phpとか出た当初からヘルプ見やすかったのに
176名無し~3.EXE:2010/05/12(水) 07:00:21 ID:68JY7Il4
結構立派なヘルプ付いてるじゃん
177名無し~3.EXE:2010/05/12(水) 22:12:32 ID:rHrZ7Sf7
>>175
get-help
178名無し~3.EXE:2010/05/14(金) 10:57:07 ID:zF+HvHO/
前スレだかにget-helpを再帰的に呼んで行ってhtmlにするスクリプトあったね
179名無し~3.EXE:2010/05/14(金) 21:09:36 ID:G4hJCY3A
v2からは普通にあるんだから別段作らんでもええがな
180名無し~3.EXE:2010/05/16(日) 20:21:17 ID:qsYFZMF1
Windows PowerShell: まずはマニュアルを書く
http://technet.microsoft.com/ja-jp/magazine/ff458353.aspx
181名無し~3.EXE:2010/05/17(月) 01:22:05 ID:5n7Sr2/a
/nsoftwareのPowerShell SSH Serverが個人ユースフリーになったぽい
ttp://www.powershellinside.com/powershell/ssh/
182名無し~3.EXE:2010/05/22(土) 14:43:03 ID:XfHQXv+A
echo 日本語 | app.exe
で日本語が???になるんだけど、どうすりゃいいの?
183名無し~3.EXE:2010/05/22(土) 15:27:14 ID:XfHQXv+A
できました!
184名無し~3.EXE:2010/05/22(土) 16:15:52 ID:wfP7yr4f
どうやってできたの?
185名無し~3.EXE:2010/05/22(土) 17:12:35 ID:XfHQXv+A
cmd.exe /c "echo 日本語 | app.exe"
186名無し~3.EXE:2010/05/22(土) 18:26:36 ID:YLwM0Qx3
$OutputEncoding = [Console]::OutputEncoding
としとくと素のままで使えると思うよ
187名無し~3.EXE:2010/05/22(土) 20:49:30 ID:g5B6QkZY
>>181
Free for Desktop use の意味がよくわからんかったけど
ようするにPowerShellSSHServer.exeを起動させた時の
アカウント名とそのパスワードでしか認証接続できないってことみたいだな

それはともかく日本語表示の設定誰か分かったら教えて、ターミナルはなんでもいいから
188名無し~3.EXE:2010/05/23(日) 14:19:36 ID:xqBacfrQ
基本的なことを教えてください
Windows 7 に標準でインストールされるPSバージョンは2.0ということで、
じっさい $PSVersionTable でも2.0が確認できるのですが、
何でv1.0というシステムフォルダにインスコされてるのでしょーか?
ずっとver1.0と思ってた・・・orz
XPは同じフォルダで1.0しかインスコされないし。

ここらへんの経緯をどなたかご教示ください
189名無し~3.EXE:2010/05/23(日) 14:22:20 ID:WJgx1Mvj
拡張子の.ps1同様、フォルダ変えるほどの差がない
ただの上書きバージョンアップ版って認識なんじゃねーの
知らんけど
190名無し~3.EXE:2010/05/23(日) 17:19:17 ID:W2D4uAW/
元はps1 v1.0 ps2 v2.0と分ける予定だったんだけど方針変更したんだろ
191名無し~3.EXE:2010/05/23(日) 19:01:14 ID:CuvsPWBl
>>188
俺もインストールに失敗してんじゃないかとか微妙に気になってた
192名無し~3.EXE:2010/05/23(日) 23:56:06 ID:5QmIWdcn
64bitになってもsystem32なんだし、気にするな。
193名無し~3.EXE:2010/05/24(月) 00:25:49 ID:U25k7xKb
ところでpowershell.exe -argsはどう使う?どうやってもエラーになるが
194名無し~3.EXE:2010/05/24(月) 00:44:20 ID:cKjgVFLg
>>193
ちゃんとPowerShellから実行してる?
powershell -Command { echo $args[0] $args[-1] } -args @(1..10)
でできたよ
195名無し~3.EXE:2010/05/24(月) 00:59:53 ID:U25k7xKb
さんきゅうです
196名無し~3.EXE:2010/05/25(火) 23:41:16 ID:bgs3trjf
コマンドプロンプトのbatファイルくらいしか分からないへたれユーザーなんですが、
業務の定型フロー(簡単なもの)を自動化してみたくてPSに興味が出てきました。

で、ちょっと触ってみたんですが、.NETフレームワークとかオブジェクト指向的考え方に不慣れで戸惑っております・・・

こんな初心者向けに良い教本とかサイトとかありますでしょうか?
197名無し~3.EXE:2010/05/25(火) 23:55:32 ID:RqU7Sdwv
サイトは知らんがWindows PowerShell実践システム管理ガイドは良書だと思う。
個人的にはウェブサイトよりは、良書を1回ナナメ読みをオススメするけどね。
.
198名無し~3.EXE:2010/05/26(水) 00:04:59 ID:RqU7Sdwv
ADとかExchangeなんかの構成を自動化するニーズはあるんだけど・・・
現実にはまだPowerShellだけで十分ではないんだよね

まだまだVBScriptのほうがネットに乗ってるのが多いし手軽いのかも。
199名無し~3.EXE:2010/05/26(水) 01:43:27 ID:nHSfZDXj
ありがとうございます。
現時点ではサーバー管理用途が多いんでしょうか。
PSは将来性が凄くありそうなので、どうせ学ぶならという気持ちもあるんですが、
自分みたいな初心者には、情報の多いVBの方が今の段階では良いのかもですね。
ご紹介頂いた本も探しつつ、VBも検討してみます。どうもでした!
200名無し~3.EXE:2010/05/26(水) 21:29:51 ID:9VJjYqhX
>>197
どういうところが良書なの?
上級者向けの良書だったら俺みたいのは
手が出ないから詳細を聞きたい
201名無し~3.EXE:2010/05/28(金) 03:11:28 ID:NpVekdmh
WINDOW 7 64で使おうとしてるんですが

IE 32bit版を非表示起動させるにはどうしたら書けばいいでしょうか?

202名無し~3.EXE:2010/05/28(金) 15:48:48 ID:K9v1827P
相談にのってけろ・・・

文字コードがeucのファイルを一括置換したいんのだけど、
powershellだとリダイレクト出力時にunicodeになってしまう・・・

out-fileコマンドレットを使うと、-encoding defaultにすると
うまく行きそうでしたけど、改行コードが\r\nに勝手に変換されてしまう・・

どうしたらいいんだろ、
203名無し~3.EXE:2010/05/28(金) 19:21:16 ID:IOZzcCUH
ttp://www.atmarkit.co.jp/fwin2k/win2ktips/1012pschcode/pschcode.html
この中で改行文字を変更すればよい
204名無し~3.EXE:2010/06/03(木) 17:50:33 ID:NlLzN6pa
ファイル名に中カッコ([or])を含む場合、どうやって指定したらいいのん?
[Test].txtというファイルがあるとして、Test-Path "[Test].txt"だとFalseが返ってくる。
""や''でくくってもダメだし、[]を含ませるにはどう記述したらいいんでしょう?
(Get-ChildItemで返されてきた場合なんかも含む)
205名無し~3.EXE:2010/06/03(木) 19:44:33 ID:fFk8NoFR
>>204

-Path ではなく、 -LiteralPath を使う。
206名無し~3.EXE:2010/06/04(金) 00:32:22 ID:0eksM06N
>>205
記述の仕方じゃなく、オプションだったのか orz
教えてもらったオプションで、期待通りの動作をしてくれました。
どうもありがd
207名無し~3.EXE:2010/06/04(金) 19:36:49 ID:3xu9Ih61
すいません
wikiの
PS> $rssUrl = "http://blogs.msdn.com/powershell/rss.aspx"
PS> $blog = [xml](new-object System.Net.WebClient).DownloadString($rssUrl)
PS> $blog.rss.channel.item | select title -first 8
を実行すると2行目で
値 "
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
          略
" を型 "System.Xml.XmlDocument" に変換できません。エラー: "リモート サーバーがエラーを返しました: (503) サーバーを使用
できません"
発生場所 行:1 文字:62
+ $blog = [xml](new-object System.Net.WebClient).DownloadString <<<< ($rssUrl)
+ CategoryInfo : NotSpecified: (:) []、RuntimeException
+ FullyQualifiedErrorId : RuntimeException
て出てくるんですけど。
xmlとかは良く解らないんですが、解決法は有りませんか
208名無し~3.EXE:2010/06/04(金) 23:04:08 ID:3xu9Ih61
自分で
$a =[xml]"<aaa>ssss</aaa>"
てやったらキャスト出来たから
元のが悪いのかな??
209名無し~3.EXE:2010/06/04(金) 23:25:13 ID:cAvBQvci
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
とかがなんでxmlにキャストできるんだよ
210名無し~3.EXE:2010/06/05(土) 03:10:02 ID:YmnKnoMR
>>209
言ってる意味が解りません。
211名無し~3.EXE:2010/06/05(土) 03:24:48 ID:rZ1ELnDu
取得してる文字列がそもそもXML(RSS)じゃないってこと
(XHTMLでも構文エラーがなければXMLとしてパースできるかもしれないが)
実際にそのURIにアクセスしてみなよ
リダイレクトしてRSSに飛ぶから
212名無し~3.EXE:2010/06/05(土) 18:52:31 ID:YmnKnoMR
之でいけたけど
$enc = [System.Text.Encoding]::GetEncoding("utf-8")
$rssurl="http://headlines.yahoo.co.jp/rss/jct_dom.xml"
( [xml]$enc.getstring((New-Object system.net.WebClient).DownloadData($rssurl)) ).rss.channel.item | select title -first 8

title
-----
20代女性の6割が「猫背」  「外反母趾」や「むくみ」と関連(J-CASTニュース)
菅次期首相週明けに組閣 「反小沢色」強まる(J-CASTニュース)
FM最長寿番組「ジェットストリーム」 JALが「1社単独提供」断念(J-CASTニュース)
「相談して決めること多い」 菅代表歯切れの悪い記者会見(J-CASTニュース)
物議を醸す「ザ・コーヴ」 配給会社は「上映続行したい」(J-CASTニュース)
鳩山氏「子分に裏金」疑惑 民主代表の座カネで買う?(J-CASTニュース)
「小幅入れ替え」菅新内閣 サプライズは蓮舫議員?(J-CASTニュース)
次期首相有力の菅副総理 「イラ菅」へ戻る?「無心の境地」?(J-CASTニュース)

手間掛けさせやがって、糞wikiがww
powershellは早々に消すわw
213名無し~3.EXE:2010/06/10(木) 22:55:10 ID:Mm67oFQ6
PowerShellは来年ぐらいに流行るとみた。
214名無し~3.EXE:2010/06/11(金) 09:56:41 ID:Ik/gYtIn
すごいねみんな、こんなわけのわからんもんよく使えるね。
俺なんてパワーシェルで使ったコマンドなんてipconfig, ping, mstscぐらいだよ。
215名無し~3.EXE:2010/06/11(金) 20:03:12 ID:7BoDCoVI
俺はバッチファイル書ける人を尊敬する
あれは俺には難しすぎた・・・
216名無し~3.EXE:2010/06/11(金) 22:28:15 ID:NNhbT/to
バッチファイルって
自信ではバージョンチェックとかの機構が無いのに
forとかの制御構造が、OS毎に違った気がする
嫌になった
217名無し~3.EXE:2010/06/12(土) 09:52:57 ID:6Wusi+SX
想定する最低レベルの環境に合わせて書けばいいだけのこと。
218名無し~3.EXE:2010/06/12(土) 14:52:56 ID:ckmjuK9i
拡張機能使ったところで、インチキパイプ、クォートなどの致命的な欠点は残ったままだし。
219名無し~3.EXE:2010/06/14(月) 00:02:57 ID:Pwrq3a+g
212ですが
>powershellは早々に消すわw
は無しにしてください。
つい粋がって虚勢を張ってしまいました。
とり合えず今は、エロブログの画像ダウンローダーを作ってます。
220名無し~3.EXE:2010/06/14(月) 22:50:35 ID:Cu4c6uqs
起動のたびに nal more.com less.exe を打つのが面倒
署名をつけて自動実行させるのはもっと面倒
221名無し~3.EXE:2010/06/14(月) 23:15:34 ID:mF0aQWMH
powershell -NoExit "好きなコマンド"
ってしといたショートカット作ればいいんじゃね
222名無し~3.EXE:2010/06/15(火) 20:51:39 ID:io5tR8aY
>>221
なるほど
"好きなコマンド" のところで cat して iex することで
ファイル読み込ませることにしました
223名無し~3.EXE:2010/06/15(火) 22:01:46 ID:uCC7LZUO
powershellはコマンドライン用というよりはそれでソフトウェア作る用なんじゃないか
書き捨てで書き殴るには複雑すぎる
224名無し~3.EXE:2010/06/15(火) 23:16:49 ID:io5tR8aY
ウィンドウの幅を変えるために
$Host.UI.RawUI.WindowSize
をいじってもうまくいかなかったから、
しばらく mode.com を使っていたけれども
単に値型の罠で動いていなかっただけだったわ
225名無し~3.EXE:2010/06/15(火) 23:20:18 ID:io5tR8aY
# [string]::Join("`n", @(cat C:\hoge\Init-PowerShell.ps1)) | iex
sal more.com less.exe
function width([int]$w=0){
  if($w -le 0) {
    return $Host.UI.RawUI.WindowSize.Width;
  }
  $ws = $Host.UI.RawUI.WindowSize;
  $bs = $Host.UI.RawUI.BufferSize;
  $ws.Width = $w;
  $bs.Width = $w;
  if ( $w -gt $Host.UI.RawUI.BufferSize.Width) {
    $Host.UI.RawUI.BufferSize = $bs;
    $Host.UI.RawUI.WindowSize = $ws;
  } else {
    $Host.UI.RawUI.WindowSize = $ws;
    $Host.UI.RawUI.BufferSize = $bs;
  }
}
function height([int]$h=0){
  if($h -le 0) {
    return $Host.UI.RawUI.WindowSize.Height;
  }
  $ws = $Host.UI.RawUI.WindowSize;
  $ws.Height = $h;
  $Host.UI.RawUI.WindowSize = $ws;
}
function title([string]$t="") {
  if($t -eq "") {
    return $Host.UI.RawUI.WindowTitle;
  }
  $Host.UI.RawUI.WindowTitle = $t;
}
226名無し~3.EXE:2010/06/15(火) 23:40:00 ID:io5tR8aY
コマンドラインから改行がうまく渡す方法が分からないなあ

とりあえず Environment.NewLine で逃げてみるか
powershell.exe -NoExit -Command "[string]::Join([Environment]::NewLine, @(cat C:\hoge\Init-PowerShell.ps1)) | iex"
227名無し~3.EXE:2010/06/15(火) 23:52:00 ID:io5tR8aY
cat で頑張らなくても [System.IO.File]::ReadAllText なんてのがあるのね

powershell.exe -NoExit -Command "iex $([System.IO.File]::ReadAllText('C:\hoge\Init-PowerShell.ps1'))"

最初は cat hoge.ps1 |% { iex $_ } でやっていたせいでそれに引きずられちゃった
228名無し~3.EXE:2010/06/20(日) 01:21:27 ID:yv5OOOJL
少々質問よろしいでしょうか。

古いファイルを指定したフォルダと日付から検索するスクリプトをpowershellで組もうとして、
そこにエラーメッセージを入れようとするとうまくいかないのですが誰かわかるでしょうか。
今手元にファイルをもってなく、直接打ち込んでいるのでスクリプト誤字はご容赦ください。

function f ([Strings]$a, [datetime]$b)
{
Get-ChildItem $a | ? {$_.CreationTime -le $b}
}

こんなかんじで作ったのですが、これにif文をいれて、アドレスと日時が入力されていないときに
エラーが出るようにしよう、としたのですが…

.countを使って、
function 以下略{
if( ($a.count + $b.count) -eq 2 )
{前述のスクリプト}else{
エラーメッセージ}
}

のようにすると、
if( ($a.count + $b.count) -eq 2 )が間違いだと思うのですがエラーメッセージしか返って来ません。

function f ( $args )
if ( $args,count -eq 2)
とする場合、
前述のスクリプトの{$_.CreationTime -le $b}を{$_.CreationTime -le [Datetime]$arg[1]}
とでもすればいいのでしょうが、
こうするとdatetime形式に$arg[1]が変換できない、のようなエラーを吐かれてしまいます。
自分の腕の未熟さはわかりましたので別の条件でエラーメッセージを出すことにしたのですが、
if( ($a.count + $b.count) -eq 2 ) や [datetime]$arg[1]などはどうして間違いなのかを教えていただきたいです。
229[名無し]さん(bin+cue).rar:2010/06/20(日) 02:04:35 ID:vRT9KUoq
>>228
[String"s"] とか $arg"s" に対して $arg[1] だったりは
打ち込み直したから間違えただけなのか
原本でも間違えてるからエラーになってるのか分からない

function f ( $args ) はおそらく自動変数の $args を
使おうとしてるんだろうとは思うけど
自動変数だから引数で使おうとしちゃ駄目だよ

あと、その変数に .count プロパティが有るかないか
あるとしたらどんな値を返すか位は見ておかないと。

それが終わったら ISE からヘルプ開いて
about_Functions_Advanced と
about_Functions_Advanced_Parameters の Mandatory 属性のところを読むといいと思うよ
230名無し~3.EXE:2010/06/20(日) 08:56:11 ID:yv5OOOJL
>>229
ありがとうございました。
参考にしてもらいます。
231名無し~3.EXE:2010/06/20(日) 14:56:42 ID:kQIbsBAe
誰に?
232名無し~3.EXE:2010/06/21(月) 10:51:48 ID:6O7Jc+Lc
>>228

function f([Strings]$a, [datetime]$b){
  if(!$a -or !$b){return "パラメータを的確に入力せよ"}
  Get-ChildItem $a | ? {$_.CreationTime -le $b}
}
233名無し~3.EXE:2010/06/21(月) 21:13:15 ID:2HQSeV/1
>>232
ありがとうございます。

>>231
誤字です。申し訳ないです。
234名無し~3.EXE:2010/06/24(木) 03:23:08 ID:5SRaAOCa
$list = get-content -path list.txt
$now = get-date
$list += $now
set-content -path list.txt $list

ファイルからテキストデータを取得して
一行追加して保存するというコードを書いたところ
改行されず行の末尾にどんどんデータが追加されていってしまいます。
不思議なことにエディタを使って手動で改行してやると
次の追加からはちゃんと改行が挿入されます。

テキストファイルと文字列配列の相互変換というのはどうやるのが正しいんでしょうか。
add-contentを使うやり方はうまくいきましたが
それとは別に一旦メモリにロードして書き戻す
正しいやり方が知りたいです。
235名無し~3.EXE:2010/06/24(木) 06:56:52 ID:QDFSa6c3
>>234

Get-Dateの結果は「文字列」じゃないですよ。
236名無し~3.EXE:2010/06/24(木) 07:06:57 ID:rafA90NF
Get-Date なんてあったのか
UNIX と合わせて date のエイリアスを振っといてもらわんと存在に気付かんよ

まったく [DateTime]::Now とかしていた俺って
237名無し~3.EXE:2010/06/24(木) 07:24:14 ID:Rytf+gds
date で呼び出せるがな実際
238名無し~3.EXE:2010/06/24(木) 07:36:52 ID:rafA90NF
cmd.exe なら date があるけれども powershell に date ってある?
gcm date としても GnuWin32 の date.exe しか出てこない
239名無し~3.EXE:2010/06/24(木) 20:47:47 ID:VUPiF+zq
http://kazemati.blogspot.com/2008/10/powershellexcel.html

ここを参考にして、
$sheet.Cells.Item(1,1).Text
の行を
for each ($i in (1...5) {$sheet.cells.Item($i,1).text}
と書き換えて
エクセルファイルのA1〜A5を表示させることに成功したのですが、
さらにここにifや?を組み込んで特定の文字列が含まれる場合のみ表示、としたいのですが
その場合はどうすればよいでしょうか?

.textがどういうものなのかも検索してもよくわからなく、どうすればよいのか…
240名無し~3.EXE:2010/06/24(木) 22:15:25 ID:yPssf1TG
>>238
date って打ち込んで試せば分かることですがな
前スレでも話題になってた気がする

PS> function get-bakeratta { "バケラッタ" }
PS> bakeratta
バケラッタ

>>239
何が分からないのか良く分からないけど
文字列の比較の仕方が分からないなら
ヘルプの about_Comparison_Operators 見るといいよ
241名無し~3.EXE:2010/06/24(木) 22:32:20 ID:O4Gzwtog
>>240
date.exe が邪魔してるよおおおお

PS C:\> get-date; date

2010年6月24日 22:31:41
木 6 24 22:31:41 Tokyo Standard Time 2010
242名無し~3.EXE:2010/06/24(木) 23:01:52 ID:uEkEIR0P
>>241
うちの環境では普通にget-dateとして機能するなあ
PowerShell 2.0 / Windows 7 x64

PS C:\> get-date; date; date -displayhint time; (date).AddHours(12)

2010年6月24日 22:58:40
2010年6月24日 22:58:41
22:58:41
2010年6月25日 10:58:41
243名無し~3.EXE:2010/06/24(木) 23:10:52 ID:O4Gzwtog
>>242
>240のは動くんだけれどもPATHの通っているところに date.exe があるから
date を入力しても Get-Date にならずに date.exe になってしまうのよ。

PS C:\> function get-explorer{"explorer"}
PS C:\> explorer
とやると get-explorer 関数が呼ばれずに Explorer が起動しちゃう。
244名無し~3.EXE:2010/06/24(木) 23:38:30 ID:uEkEIR0P
なるほど、>>238でいってるGnuWin32のdate.exeが入ってるからか
そうなるとPATHを一時的に消すか、エイリアス設定するしかないんじゃね

PS C:\Users\ise> function get-explorer{"エクスプローラー"}
PS C:\Users\ise> set-alias explorer get-explorer
PS C:\Users\ise> explorer
エクスプローラー
245名無し~3.EXE:2010/06/24(木) 23:39:23 ID:uEkEIR0P
うお、ユーザー名orz
246名無し~3.EXE:2010/06/24(木) 23:42:37 ID:yPssf1TG
別に困ってるわけではなさそうだし今のままでいい悪寒
デフォルトの環境だと date は Get-Date として機能するっだけての話しだし
247名無し~3.EXE:2010/06/25(金) 00:17:05 ID:Lav4+jgv
暇なんでaboutとコマンドレットをhtml化するのを作ってみますた。
index.htmlのおまけ付きです。
pspのブラウザーで見ながら出きるので便利です。


$dna ="about_html"
$dnc ="Cmdlet_html"

new-item -name $dna -type directory | out-null
foreach ($a in (Get-ChildItem -path "$pshome/ja" | ? { $_.name -like "about*"})){
$base = ((Get-ChildItem "$pshome/ja/$a").OpenText()).Readtoend()
$base = "<pre>" + (($base.Replace("<","<")).Replace(">",">")) + "</pre>"
convertTo-Html -body $base -Title $a.name > ($dna+"/"+$a.name+".html")
$ind = $ind + "<A href=`""+$a+".html"+"`" >"+$a.name+"</A><br>"
}
convertTo-Html -body $ind -Title "about_index" > ($dna+"/index.html")

$base = "";$ind = ""

new-item -name $dnc -type directory | out-null
foreach ($a in (Get-Command -CommandType Cmdlet)){
$base = Get-Help $a.name -full | out-string
$base = "<pre>" + (($base.Replace("<","<")).Replace(">",">")) + "</pre>"
convertTo-Html -body $base -Title $a.name > ($dnc+"/"+$a.name+".html")
$ind = $ind + "<A href=`""+$a+".html"+"`" >"+$a.name+"</A><br>"
}
convertTo-Html -body $ind -Title "Cmdlet_index" > ($dnc+"/index.html")
248名無し~3.EXE:2010/06/25(金) 00:22:14 ID:Lav4+jgv
すいません
$base.Replace("<","<")).Replace(">",">")
  ↑のリプレスの二番目の引数はそれぞれ
<は&lt;
>は&gt;
です。
ごめんちゃい
249名無し~3.EXE:2010/06/25(金) 00:46:24 ID:xbzcwe7U
iseさん…
250名無し~3.EXE:2010/06/25(金) 00:47:40 ID:mSLJKvLX
PowerShell ISE さん
さすがだ
251名無し~3.EXE:2010/06/25(金) 20:43:54 ID:0/U66yua
ttp://journal.mycom.co.jp/column/powershell/010/index.html

-join と -ReadCount はもっと評価されるべき
type address.txt -r 5 | % { $_ -join "," }
252名無し~3.EXE:2010/06/27(日) 09:09:08 ID:JCAKYY/N
Get-Location と
[System.IO.Directory]::GetCurrentDirectory() は、
値違うんですね。
と言うか、PowerShellで Set-Location しても、
System.IO.Directory で管理しているカレントディレクトリは変更しない、
と言うべきかな。

IO.StreamWriter 調べていて気がついた、です。
253名無し~3.EXE:2010/06/27(日) 12:48:20 ID:K3nSxfR1
>>252
リネームするために FileInfo#MoveTo 使ったら痛い目にあったことあり
254名無し~3.EXE:2010/06/29(火) 22:56:22 ID:dyF8Lcp7
VistaのWindows UpdateにPowershell 2.0が来てる
255名無し~3.EXE:2010/07/06(火) 00:31:42 ID:kPA7wvIt
暇なんで、作ってみますた
[void][Reflection.Assembly]::LoadWithPartialName("System.windows.forms")
[void][Reflection.Assembly]::LoadWithPartialName("System.Runtime.InteropServices")
function New-PType() {
$assembly_name = New-Object Reflection.AssemblyName 'PInvokeAssembly'
$dd_assembly = [AppDomain]::CurrentDomain.DefineDynamicAssembly($assembly_name, 'Run')
$dd_module = $dd_assembly.DefineDynamicModule('PInvokeModule')
return $dd_module.DefineType('PInvokeType', "Public,BeforeFieldInit")
}
function New-PMethod([string]$dllName, [Type]$returnType, [string]$methodName, [Type[]]$parameterTypes){
$ptype = New-PType
$d_method = $ptype.DefineMethod($methodName, 'Public,HideBySig,Static,PinvokeImpl', $returnType, $parameterTypes)
$constructor = [Runtime.InteropServices.DllImportAttribute].GetConstructor([string])
$attrbute = New-Object Reflection.Emit.CustomAttributeBuilder $constructor, $dllName
$d_method.SetCustomAttribute($attrbute)
$type = $ptype.CreateType()
$type = Add-Member -InputObject $type -MemberType NoteProperty -Name MethodName -Value $methodname -passthru
$invoke = {return $this.InvokeMember($this.MethodName, 'Public,Static,InvokeMethod', $null, $null, $args[0])}
Add-Member -InputObject $type -MemberType ScriptMethod -Name Invoke -Value $invoke
return $type
}
$ptc = @'
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential)]
public struct POINT
{
public int x;
public int y;
}
'@
256名無し~3.EXE:2010/07/06(火) 00:32:35 ID:kPA7wvIt
続き
Add-Type -TypeDefinition $ptc
$WindowFromPoint = New-PMethod "user32.dll" ([Int32]) "WindowFromPoint" @([POINT])
$PostMessage = New-PMethod "user32.dll" ([Int32]) "PostMessage" @([Int32],[Int32],[Int32],[Int32])
$GetAncestor = New-PMethod "user32.dll" ([Int32]) "GetAncestor" @([Int32],[Int32])
$pt = New-Object POINT; $ptb = New-Object POINT

while($true){
$pt.x= [System.Windows.Forms.Cursor]::Position.x
$pt.y= [System.Windows.Forms.Cursor]::Position.y
start-sleep -m 50
if(($pt.x -ne $ptb.x) -or ($pt.y -ne $ptb.y )){
$ptb.x=$pt.x; $ptb.y=$pt.y
$hwd = $WindowFromPoint.Invoke([POINT]$ptb)
$ohwd = $GetAncestor.Invoke(@([int32]$hwd ,[int32]3))
$t = Get-Process | ? { $_.MainWindowHandle -eq $ohwd}
"x="+$ptb.x+":y="+$ptb.y+" ハンドル"+$hwd+" 親ハンドル"+$ohwd+": "+$t.MainWindowTitle
#コントロールをクリック
#$PostMessage.Invoke(@([int32]$hwd ,[int32]0x201,[int32]0,[int32]0)) | out-null
#$PostMessage.Invoke(@([int32]$hwd ,[int32]0x202,[int32]0,[int32]0)) | out-null
}
}
257名無し~3.EXE:2010/07/06(火) 13:20:47 ID:Z4Ex5Sa1
テキストファイルの行数は.lengthで獲得できるけど
エクセルファイルで何列目の何行まで使っているか、はどうやれば獲得できるのかな

>>239みてて思った
258名無し~3.EXE:2010/07/06(火) 22:09:06 ID:KuRfnHZn
[Enum]::GetValues([IO.FileAttributes]) | select {$_},{[int]$_}
は動くのに
[Enum]::GetValues([IO.FileAttributes]) | select {$_},{[int]$_} | ogv
が動かないのをなんとかしる
select の引数をまじめに書く
[Enum]::GetValues([IO.FileAttributes]) | select @{Name="Name";Expression={$_}},@{Name="Value";Expression={[int]$_}} | ogv
は面倒だからやだ
259名無しさん@そうだ選挙に行こう:2010/07/10(土) 04:50:45 ID:c2m5VYAj
$ie.document.parentWindow が null になるんだけどなんでだろう
260名無しさん@そうだ選挙に行こう:2010/07/11(日) 21:36:31 ID:8wpZODee
>>258
Select-Object -Property の引数を PropertyPath の XAML 構文としてパースした場合エラーになるって言うのは
PowerShell の構文をどうにかしない限りどうしようも無いと思うが。
今回は↓で回避できるけど、Out-GridView 呼び出しまで含めてラッパ作っちゃった方が早いんじゃね。
[Enum]::GetValues([IO.FileAttributes]) | select {$_},{,([int]$_)} | ogv
261名無しさん@そうだ選挙に行こう:2010/07/11(日) 21:44:56 ID:Y0LxWDlI
>>260
エラーは出ないけれども ([int]$_) の値が表示されないよ
262名無しさん@そうだ選挙に行こう:2010/07/11(日) 21:50:25 ID:8wpZODee
>>261
カンマを付け忘れてる
263名無しさん@そうだ選挙に行こう:2010/07/11(日) 22:04:21 ID:Y0LxWDlI
おお、表示できた
難易度高いわ
264名無し~3.EXE:2010/07/13(火) 16:17:31 ID:viaEAdkS
>難易度高いわ
難度高いわ
265名無し~3.EXE:2010/07/16(金) 01:02:23 ID:nQrufqp5
>>86
とりあえず、はっときます

param($q)
[object[]]$url
if($q -eq $null){$q = "米 味噌"}
$ie = new-object -com internetexplorer.application
$ie.navigate("http://google.co.jp")
while($ie.busy){start-sleep -m 50}
while($ie.Document.readyState -ne "complete"){start-sleep -m 50}
$ied = $ie.document
@($ied.getElementsByName("q"))[0].value = $q
@($ied.getElementsByName("btnG"))[0].click()
while($ied.readyState -ne "complete"){start-sleep -m 50}
$doc = @(($ied.getElementById("res")).getElementsByTagName("OL"))[0].innerHTML
if( ($nav=$ied.getElementById("nav")) -ne $null){
$nav.getElementsByTagName("td") | % { if(($_.cellIndex -gt 1) `
-and ( $_.cellIndex -le (@($nav.getElementsByTagName("td")).length -2)) ){ $url += @($_.firstChild.href) }}

foreach($u in $url){
$ie.navigate($u)
while($ied.readyState -ne "complete"){start-sleep -m 50}
$doc = $doc + @(($ied.getElementById("res")).getElementsByTagName("OL"))[0].innerHTML
}
}
$doc = "<ol>"+$doc+"</ol>"
convertTo-Html -body $doc -Title "検索" > get2.html
$ied.write($doc)
$ie.visible = $true
266名無し~3.EXE:2010/07/16(金) 01:05:45 ID:nQrufqp5
100件なら 検索おぷしょんで設定した方が早いような 藁
こっちは検索数バー所運
param($q)
#qcは検索数各自書き換えてください。
$qc = 50
if($q -eq $null){$q = "米 味噌"}
$ie = new-object -com internetexplorer.application
$ie.navigate("http://google.co.jp")
while($ie.busy){start-sleep -m 50}
while($ie.Document.readyState -ne "complete"){start-sleep -m 50}
$ied = $ie.document
@($ied.getElementsByName("q"))[0].value = $q
@($ied.getElementsByName("btnG"))[0].click()
while($ied.readyState -ne "complete"){start-sleep -m 50}
$qa = $ie.LocationURL
$doc = @(($ied.getElementById("res")).getElementsByTagName("OL"))[0].innerHTML
$iec = $ied.getElementById("nav")
$url = @($iec.getElementsByTagName("td"))[2].firstChild.href
if($qc -gt 10){
for($i=10;$i -lt $qc; $i += 10){
$ie.navigate($url.replace("start=10","start=$i"))
while($ied.readyState -ne "complete"){start-sleep -m 50}
$doc = $doc + @(($ied.getElementById("res")).getElementsByTagName("OL"))[0].innerHTML
}
}
$doc = "<ol>"+$doc+"</ol>"
convertTo-Html -body $doc -Title "検索" > get.html
$ied.write($doc)
$ie.visible = $true
267名無し~3.EXE:2010/07/16(金) 01:28:45 ID:DGgvO4Hx
タスクバーで点滅
268名無し~3.EXE:2010/07/16(金) 19:58:08 ID:nQrufqp5
自分で対処してください
269名無し~3.EXE:2010/07/17(土) 02:33:51 ID:Cx2mEIGQ
$ie.document.focus
270名無し~3.EXE:2010/07/18(日) 16:19:47 ID:MD6LitbG
"1" 個の引数を指定して "write" を呼び出し中に例外が発生しました: "種類が一致しません。"
271名無し~3.EXE:2010/07/18(日) 19:22:55 ID:1jb4hW0g
>>259
PowerShellでは、MTAで、$ie.document.parentwindowが見えない。
ttp://scripting.cocolog-nifty.com/blog/2010/07/powershellmtaie.html
272名無し~3.EXE:2010/07/18(日) 23:53:42 ID:9EcxcK/O
>>271
前置きの文章の流れがつかみにくい・・・

「STAでは見えます。なので、MTAならSTAで起動し直します。」

程度に削っちゃった方が「以下のコードがそのサンプルですよ」ってことが分かりやすいんじゃないかと思う
273名無し~3.EXE:2010/07/19(月) 02:07:11 ID:+L9wDm12
最近日本語が不自由でプログラム言語でしかしゃべれない人が増えてるから仕方ない
274名無し~3.EXE:2010/07/20(火) 01:21:36 ID:Vkd1I8kA
日本語が相手にされてない
275名無し~3.EXE:2010/07/23(金) 00:16:24 ID:1K/4j0hr
([System.AppDomain]::CurrentDomain.GetAssemblies())[2].gettypes()|
? {($_.namespace -like "*net*") -and ($_.basetype -like "*enum*") -and ($_.IsPublic -eq $true) } |
%{@("##$_.name##")+([Enum]::GetValues((Invoke-Expression "[$_]")))} | select {$_},{,([int]$_)} | ogv

なんか、ぱわーセルのパイプは面毒せーな〜
276名無し~3.EXE:2010/07/23(金) 02:20:20 ID:x1KXUDuh
>>275
そんな丁寧に書かんでもいい気がするが、かえって見づらくない?
[AppDomain]::CurrentDomain.GetAssemblies()[2].gettypes() |
? { $_.namespace -like "*net*" -and $_.IsEnum -and $_.IsPublic } |
% { "##$_##"; $_.GetEnumValues()} | select {$_},{,([int]$_)} | ogv
277名無し~3.EXE:2010/07/23(金) 23:07:53 ID:rVRWb7I9
()で括るのは、昔からの癖です
278名無し~3.EXE:2010/07/25(日) 19:58:11 ID:VoWF7+QR
こんにちは、コマンドプロンプトでまともにUTF-8が利用できないため、
PowerShellに逃げてきたのですが、
同じような状態に陥っています。
UTF-8はやっぱり駄目ですかね

やったこと
・PowerShellのプロンプトでchcp 65001
・chcp 65001するとbatファイルが動かなくなる(Ruby win32のirbなどのbat経由のツールが動かない)
動かないというのはコマンドを入力して何も集力も入力もされずスルーされる感じです
・ruby -e "puts File.read('UTF-8.txt')" -Ku のようにUTF-8 BOMなし出力すると、
若干も化けで表示され以下のエラーが出る。こちらはRuby側の問題がありそう

-e:1:in `write': Bad file descriptor (Errno::EBADF)
from -e:1:in `puts'
from -e:1

これらはPowerShellだから起こっているというより、cmd.exeでも全く同様なようです
挙動がコマンドプロンプトをかわらず残念な気持ちになっています。

対処法はありませんでしょうか?
279名無し~3.EXE:2010/07/25(日) 20:19:30 ID:2+OhiPNv
>>278
perlだと内部的なunicodeに一度変換しないとダメだな

use Encode;

$umsg = Encode::decode('cp932',$_);
$omsg = Encode::encode('utf8',$umsg);
280名無し~3.EXE:2010/07/26(月) 04:04:13 ID:DF1zghAi
powershellからchcpしようが、cmd.exeが65001でファイル入力できないのは変わるはずがない
281名無し~3.EXE:2010/07/26(月) 04:34:09 ID:gU81Z1R6
すみません

『PowerShell V2』ってどこからダウンロードできるのでしょうか?
282名無し~3.EXE:2010/07/26(月) 14:40:57 ID:9hra5H3I
>>281
今ならWindows Updateで入手できるだろ。
283名無し~3.EXE:2010/07/27(火) 03:54:03 ID:UiJDAn1P
>>280
あ、そうなんだ
284名無し~3.EXE:2010/07/27(火) 07:08:39 ID:NQ1dJpVv
対話形式でないならISEでchcp実行して使うのが最善
285名無し~3.EXE:2010/07/27(火) 17:43:32 ID:jy1TdZPe
UTF-8にすると、なにがよいのか? 嗜好?
286名無し~3.EXE:2010/07/28(水) 22:55:46 ID:JFn2O9W3
パワーシェル2.0ってこれだよね?
ttp://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=60cb5b6c-6532-45e0-ab0f-a94ae9ababf5

上インストールした後、WIN-ARCserve Replication r12.5 Service Pack 2をインストールしようとしたら、
パワーシェルがはいってませんってのでインストールできなかた。
誰か対応策わかる人いますか?

コマンドプロンプトからpowershellでPS〜〜〜って表示がでるのでインストールされているとは思うんですが。

よろしくお願いします。
287名無し~3.EXE:2010/07/28(水) 23:34:03 ID:rgFfRD6a
2.0でなくて1.0が必要なんでないの?
288名無し~3.EXE:2010/07/29(木) 01:20:20 ID:VEGuyEZw
再起動した?
289名無し~3.EXE:2010/07/31(土) 09:26:13 ID:0ocBVOJA
powershellって流石にアプリケーション操作したり出来ないよね?
290名無し~3.EXE:2010/07/31(土) 09:30:59 ID:H4e5Rs0+
291名無し~3.EXE:2010/08/21(土) 21:42:17 ID:v5FcvLKZ
ファイルを読み込んで標準出力でバイナリダンプ表示するスクリプト教えてください。
1行16バイト、出来ればバイナリエディタみたいに16進とテキスト表示を両方出す。
292名無し~3.EXE:2010/08/23(月) 20:35:05 ID:hs30we1S
DOMはIE以上に不完全なんだなぁ……frameworkの問題だけど
293名無し~3.EXE:2010/08/24(火) 05:14:13 ID:YW9zNlRD
>>291
マルチバイト文字とかエラー処理とか全く考えないで適当に書くとこんな感じ

type hogehoge.txt -Encoding Byte -ReadCount 16 |
% { ( $_ | % { '{0:X2}' -f $_ } ) `
+ [Text.Encoding]::Default.GetString($_) -replace '\r|\n', '.'
-join " " }
294291:2010/08/24(火) 22:58:58 ID:Ofpa1iHQ
ありがとうございます。
これを元に改造していこうと思います。
295名無し~3.EXE:2010/08/27(金) 01:08:41 ID:ibsmysIq
Win7 X64のアクセサリ内にあるPowerShellって
x86ってついてる方がsyswow64のPowerShell.exeにリンクしてて、
何もない方がsystem32のPowerShell.exeにリンクしてるのはなぜ?
64ビットでもデフォは32bitはまだいいけどx86がなんで64bitの方にリンクしてんの?
296名無し~3.EXE:2010/08/27(金) 04:30:59 ID:yEtTSghx
>>295
syswow64 内のが 32 ビットで、system32 内のファイルは 64 ビット。
WOW64 のことを調べればわかる
297名無し~3.EXE:2010/08/27(金) 07:22:46 ID:iUJAH/Af
>>275-276のをいじくっていたら逆に長くなってしまった

([AppDomain]::CurrentDomain.GetAssemblies())[2].GetTypes()|
? {($_.Namespace -match "net") -and $_.IsEnum -and $_.IsPublic} |
% {[Enum]::GetValues($t) |
Add-Member NoteProperty xType $_ -PassThru |
Add-Member ScriptProperty xName {$this} -PassThru |
Add-Member ScriptProperty xValue {[int]$this} -PassThru} | select x* | ogv

なんで Add-Member にはエイリアスが設定されてないのかと
298名無し~3.EXE:2010/08/27(金) 07:38:19 ID:iUJAH/Af
>>297でなんか $t が残っていたので修正

([AppDomain]::CurrentDomain.GetAssemblies())[2].GetTypes()|
? {($_.Namespace -match "net") -and $_.IsEnum -and $_.IsPublic} |
% {[Enum]::GetValues($_) |
Add-Member NoteProperty xType $_ -PassThru |
Add-Member ScriptProperty xName {$this} -PassThru |
Add-Member ScriptProperty xValue {[int]$this} -PassThru} | select x* | ogv

Add-Member より New-Object のほうが楽かなあ

([AppDomain]::CurrentDomain.GetAssemblies())[2].GetTypes() |
? {($_.Namespace -match "net") -and $_.IsEnum -and $_.IsPublic} |
% {$t = $_; [Enum]::GetValues($t) |
  % {New-Object PSObject -Property @{Type=$t;Name=$_;Value=([long]$_)}}
} | ogv
299名無し~3.EXE:2010/08/30(月) 23:44:23 ID:WUhQiiLa
get-acl で以下のようなスクリプトを書きたいと思っています。
1.フォルダを巡回しながらACLを取得し、「親からの継承」を切っているフォルダや、新規に追加しているフォルダの、アクセス権一覧を出力
2.1のフォルダを出力したら、そのフォルダ以下は検索せず、次のフォルダへ

1のみであれば実現できそうなのですが、フォルダが膨大な数・階層なので、2のような条件を追加したいと思っています。get-childitem だと全部になってしまいますし・・・。
どなたかよい方法をおしえてください。
300名無し~3.EXE:2010/09/01(水) 00:01:27 ID:HUjpQ/Im
アクセスコントロールの操作ってわかりずらいよなぁ
301299:2010/09/01(水) 20:31:55 ID:V5E+u7uh
>>299
自レスですが、ttp://gallery.technet.microsoft.com/ScriptCenter/ja-jp/719bda46-6ce3-4783-b128-6224bd245467
を参考に、
「一つ上のフォルダとアクセス権が異なる場合、アクセス権を出力」
というのを考えて、以下のようにしてみました。
しかし、うまくいかず、全部のフォルダが表示されてしまいます。
なぜでしょうか?分かる方、教えてください。

$pattern_dir = $args;
$pat_sddl = (get-acl $pattern_dir).sddl
$root_dir = $args

$dirs = gci $root_dir -Recurse |? {$_.psiscontainer}

foreach ($dir in $dirs){
#一つ上のフォルダを取得
$pattern_dir = Split-Path $dir.fullname -Parent
$pat_sddl = (get-acl $pattern_dir).sddl
$dir_sddl = (Get-Acl $dir.fullname).sddl
if ($pat_sddl -ne $dir_sddl){
Get-Acl $dir.fullname |select-Object Path,AccessToString
}
}
302名無し~3.EXE:2010/09/01(水) 22:00:20 ID:bz8iAwj0
すみません、New-Eventってスレッド(てかジョブですね)間通信に使えるんじゃね?と思って
こんなソースを書いてみたんですがWait-Eventから帰ってきません。

なんかケアレスミスがあれば指摘頂きたいです。
それとも、イベントってスレッドローカルなんでしょうか。


Start-Job {
Start-Sleep 5
New-Event "My.Command"
}

Wait-Event "My,Command"

ls
303名無し~3.EXE:2010/09/01(水) 22:02:28 ID:bz8iAwj0
>>302
Start-Job {
Start-Sleep 5
New-Event "My.Command"
}

Wait-Event "My.Command"

ls

おっとミスタイプ。状況は変わりませんでしたが。
304名無し~3.EXE:2010/09/01(水) 22:22:03 ID:bjtJqVYt
  イ`ヘ
 /: :| ヽ
/ : :/  ヽ ___   _,,,:. .-: :´彡フ
_ノ\_∠: : : : : : : : :`: :-: :,:_:/彡 /
      ( : : : : : : : : : : : : : : `ゝ  /
  マ  r::/: /: : | : : : : : : : : ::\ /
      //: /: : : |: : | |: : |: _: : : :ヽ
  ジ  {/ 7|`\/i: /|:|/|´: : : : :|ヽ
     〉 ,‐-‐、`|7 || |_::|,_|: : :|:::|: |   「Windows 7」が「Windows Vista」のシェアを抜く--7月のネット利用
  で / r:oヽ`    /.:oヽヽ: :|: | :|   http://japan.cnet.com/news/service/story/0,3800104747,20417818,00.htm
     { {o:::::::}     {:::::0 }/: :|N
  っ  | ヾ:::ソ     ヾ:::ソ /|: : |
 !? ヽ::::ー-.. /ヽ ..ー-::: ヽ::| r--ッ
-tヽ/´|`::::::::::;/   `、 ::::::::::: /: i }  >
::∧: : :|: |J   \   /   /::i: | /_ゝ
. \ヾ: |::|` - ,, ___`-´_ ,, - ´|: : :|:::|
   ヽ: |::|\     ̄/ /|  |: : :|: |
305名無し~3.EXE:2010/09/01(水) 22:55:22 ID:DK59PYMo
>>299
こんなんでどう?

----------------------
function isInherited([IO.DirectoryInfo]$directory)
{
    ((get-acl $directory.fullname).access | where { -not $_.IsInherited }) -eq $null
}

function getNotInheritedACLDirectory([IO.DirectoryInfo]$directory)
{
    $inherited = @()
    $notInherited = @()

    $directory.GetDirectories() | foreach {
        if (isInherited($_)) { $inherited += $_ } else { $notInherited += $_ }
        $inherited | foreach { $notInherited += getNotInheritedACLDirectory($_) }
    }

    return $notInherited
}

getNotInheritedACLDirectory(".\foobar")
----------------------
306299:2010/09/02(木) 00:30:35 ID:d1TkZZlw
>>305
レスありがとうございました!
分からない部分がたくさありますが、継承しているかどうか見て、再帰呼び出ししている感じでしょうか。
とても参考になります。明日、さっそく試してみます。
ちなみに、継承を切らずに、アクセス権を新規追加している場合もこれでいけますかね?
307291:2010/09/02(木) 05:32:25 ID:xAgNkDGN
Powershell上から使えるファイラーってないですかね。
FDやFILMTNみたいなの。
308名無し~3.EXE:2010/09/02(木) 21:49:00 ID:ASnEy/Fz
>>306
いける
309名無し~3.EXE:2010/09/03(金) 07:02:57 ID:KcaW52wt
>>303
結論。

バックグラウンドジョブは別プロセス空間?みたいですね。
手軽な双方向のプロセス間通信の手段が入れば嬉しいですね。
310名無し~3.EXE:2010/09/04(土) 14:39:14 ID:zx25n4lT
>>299
動かしてみたらバグってた
これが正しい

----------------------
function isInherited([IO.DirectoryInfo]$directory)
{
    ((get-acl $directory.fullname).access | where { -not $_.IsInherited }) -eq $null
}

function getNotInheritedACLDirectory([IO.DirectoryInfo]$directory)
{
    $inherited = @()
    $notInherited = @()

    $directory.GetDirectories() | foreach {
        if (isInherited($_)) { $inherited += $_ } else { $notInherited += $_ }
    }

    $inherited | foreach { $notInherited += getNotInheritedACLDirectory($_) }
    return $notInherited
}

getNotInheritedACLDirectory(".\foobar")
----------------------
311299:2010/09/04(土) 16:46:17 ID:5kPJ6yEO
>>310
ありがとうございます!
実は試してみてうまくいかない部分があったので、悩んでました。
最初のforeach文の外に出しただけなんですね。それで何度も同じディレクトリが表示されていたのか!
再度トライしてみます。
312名無し~3.EXE:2010/09/04(土) 18:48:37 ID:BR8cIood
継承していないのを見つけることを
ファイルだけでなくレジストリでも
同一コードで動くようにしたらおもしろいかも
313名無し~3.EXE:2010/09/17(金) 18:40:54 ID:7dlZMkQE
タスクトレイのアイコンを右クリック -> コンテキストメニューの項目を選択

上の操作を PowerShell で一括して実行するにはどうすれば良いのでしょうか
314名無し~3.EXE:2010/09/18(土) 00:39:34 ID:4kaHsb6n
WASP使えば出来るかもね
315313:2010/09/19(日) 12:14:04 ID:bsJmLY3g
>>314
有り難う御座います
WASP を調べていたところ keybd_event() を使えば良いらしいということがわかりました

そこで以下のようなスクリプトを保存して実行したのですが
右クリック ( [Shift] + [F10] ) が実行される時点でのマウス位置で、コンテキストメニューが開いてしまいます
実際に以下のようなキー入力をすると上手くいくのですが、 PowerShell ではどうすれば同じキー操作が出来るのでしょうか
316313:2010/09/19(日) 12:16:13 ID:bsJmLY3g
# <http://d.hatena.ne.jp/ps1/20080312/1205339720> の New-PMethod 関数を使用

# Win32 API の keybd_event()
$keybd_event = New-PMethod 'user32.dll' ([Void]) 'keybd_event' @([Byte], [Byte], [UInt32], [Int64]); # [Int64]←ULONG_PTR(64bitOSの場合)
Set-Variable KEYEVENTF_EXTENDEDKEY -value 0x1 -option constant;
Set-Variable KEYEVENTF_KEYUP -value 0x2 -option constant;
Set-Variable VK_LSHIFT -value 0xA0 -option constant; # 左の [Shift]
Set-Variable VK_LWIN -value 0x5B -option constant; # 左の Windows キー
Set-Variable VK_F10 -value 0x79 -option constant; # [F10]
Set-Variable VK_RIGHT -value 0x27 -option constant; # [→]
Set-Variable B -value 0x42 -option constant; # [B]
Set-Variable E -value 0x45 -option constant; # [E]

# タスクトレイへ ( Windows キー + [B] )
$keybd_event.Invoke($VK_LWIN, 0x45, $KEYEVENTF_EXTENDEDKEY, 0);
$keybd_event.Invoke($B, 0x45, $KEYEVENTF_EXTENDEDKEY, 0);
$keybd_event.Invoke($B, 0x45, ($KEYEVENTF_EXTENDEDKEY -bor $KEYEVENTF_KEYUP), 0);
$keybd_event.Invoke($VK_LWIN, 0x45, ($KEYEVENTF_EXTENDEDKEY -bor $KEYEVENTF_KEYUP), 0);

# アイコンを選択 ( [→] )
$keybd_event.Invoke($VK_LSHIFT, 0x45, $KEYEVENTF_EXTENDEDKEY, 0);
$keybd_event.Invoke($VK_LSHIFT, 0x45, ($KEYEVENTF_EXTENDEDKEY -bor $KEYEVENTF_KEYUP), 0);

# 右クリック ( [Shift] + [F10] )
$keybd_event.Invoke($VK_RIGHT, 0x45, $KEYEVENTF_EXTENDEDKEY, 0);
$keybd_event.Invoke($VK_F10, 0x45, $KEYEVENTF_EXTENDEDKEY, 0);
$keybd_event.Invoke($VK_RIGHT, 0x45, ($KEYEVENTF_EXTENDEDKEY -bor $KEYEVENTF_KEYUP), 0);
$keybd_event.Invoke($VK_F10, 0x45, ($KEYEVENTF_EXTENDEDKEY -bor $KEYEVENTF_KEYUP), 0);

# 項目を選択 ( [E] )
$keybd_event.Invoke($VK_LSHIFT, 0x45, $KEYEVENTF_EXTENDEDKEY, 0);
$keybd_event.Invoke($VK_LSHIFT, 0x45, ($KEYEVENTF_EXTENDEDKEY -bor $KEYEVENTF_KEYUP), 0);
317名無し~3.EXE:2010/09/20(月) 19:50:31 ID:p7g5ttIt
unchecked のキャストってどうやるの?
[uint32]0xFFFFFFFF
を実行すると [uint32]::MaxValue と同じ値になるように
318名無し~3.EXE:2010/09/24(金) 19:32:24 ID:/xqcgyq2
うぉ、確かにそいつはできなかった……
319名無し~3.EXE:2010/09/28(火) 20:13:27 ID:zpnjt4Fv
Windows7 64bitで以下のスクリプトを実行するとIE8 64bitが起動します。

$ie = New-Object -ComObject InternetExplorer.Application
$ie.Navigate("http://www.google.co.jp/")
$ie.Visible = $true

これをIE8 32bitで起動させたいのですが、どうすればいいでしょうか?
320名無し~3.EXE:2010/09/29(水) 18:11:37 ID:5QcX0KGD
32bitのpowershellから実行
321名無し~3.EXE:2010/09/29(水) 20:10:29 ID:ZNlHpK5a
>>320
できました。
ありがとうございます。感謝です。
322名無し~3.EXE:2010/10/03(日) 01:04:10 ID:uMNRj7Nv
>>317
例外捕まえて自前で変換するしかないんじゃない?

$i = -1
try { [UInt32]$i } catch [System.Management.Automation.PSInvalidCastException] {
$s = [Convert]::ToString($i,16)
[Convert]::ToUInt32($s,16)
}

変換の仕方は色々あるだろうけども。
323名無し~3.EXE:2010/10/15(金) 00:06:08 ID:A5UJj1OP
ついに Jeffrey が Windows Server の偉い人か・・・
324名無し~3.EXE:2010/10/19(火) 21:50:25 ID:N+Sfw43u
値型もnullの状態で定義できたんだね
ttp://www.vistax64.com/powershell/93669-solved-nullable-types-powershell.html

[System.Nullable``1[[System.Int32]]] $foo = $null
$foo = date
値 "2010/10/19 21:48:19" を型 "System.Int32" に変換できません。エラー: "'DateTime' から 'Int32' への無効なキャストです
。"
発生場所 行:1 文字:5
+ $foo <<<< = date
+ CategoryInfo : MetadataError: (:) []、ArgumentTransformationMetadataException
+ FullyQualifiedErrorId : RuntimeException
325名無し~3.EXE:2010/10/20(水) 11:03:57 ID:oH+nUOsx
>>324

ああ、しかし、Null PropagationはPowershellでは使えない。

> [System.Nullable``1[[System.Int32]]] $foo = $null
> $foo + 1
1

Nullable型で値がnullな変数を含む計算はnullにならねばならんのに……
326名無し~3.EXE:2010/10/20(水) 22:55:58 ID:tM3E/Kiy
>>325
PowerShellの性質から言えば問題としては小さい方なんじゃないかな
引数の型がなんでもデフォルトで$nullに初期化されることに嵌る人はいそうだけど

PS > function a ($a) { $a }
PS > a -eq $null
True

PS > function a ([int]$a) { $a }
PS > a
0
327名無し~3.EXE:2010/10/20(水) 23:42:27 ID:XwEsyo9V
>>325
PS > [int]$null
0
勝手にキャストされちゃってるよかん

>>326
int は構造体で null にはならないから 0 初期化
328名無し~3.EXE:2010/10/20(水) 23:50:51 ID:tM3E/Kiy
>>327
そだよ。だから if ($a -eq 0) { ... } なんてコードが入っていて
作者が$aは値を渡さない限り存在しないとか、$nullが入っていると期待すると嵌る。
329名無し~3.EXE:2010/10/23(土) 00:48:06 ID:ki7BFzxL
Get-Content '.\foobar.txt' | .\example.exe

以上のパイプラインでは、読み込んだ文字列が Unicode で example.exe に渡されますが
これを Shift_JIS で渡すにはどうすれば良いのでしょうか
foobar.txt の文字コードは Shift_JIS です
330名無し~3.EXE:2010/10/23(土) 00:52:48 ID:QvURduIi
シンボリックリンク(mklink)に相当するコマンドってありますか?
331名無し~3.EXE:2010/10/23(土) 13:13:39 ID:PwF2J4Rz
332名無し~3.EXE:2010/10/23(土) 13:29:55 ID:0IkwvUzo
>>331
それ読むと余計に混乱すると思うがw
今回の場合は後者の説明だけ見とけばいい

>>330
ないアルよ
333329:2010/10/23(土) 14:07:28 ID:MPOjmpsa
>>331-332
どうも有り難う御座います。以下の文を付け足して上手くいきました

$OutputEncoding = [System.Text.Encoding]::GetEncoding('Shift_JIS');
334330:2010/10/23(土) 18:54:10 ID:QvURduIi
>>332
淡い期待が崩れました・・・
335名無し~3.EXE:2010/10/23(土) 20:36:37 ID:0IkwvUzo
>>334
New-Itemか何かで一元化したいなら、
適当にラッパを書けばいいんじゃないかしら
2.0から$PSBoundParameterでそういうこと楽になったし

単に外部コマンド使いたくないってことなら理解しかねるけど
336名無し~3.EXE:2010/10/24(日) 01:01:10 ID:SrZeX/RN
$PSBoundParametersを使った例は、例えばこんな感じ

function New-ItemEx {
[CmdletBinding(...)] # ***
param(...)      # ***
if ( $ItemType -eq "Symboliclink" ) { mklink ... }
else { NewItem @PSBoundParameters }
}

*** の2行は、New-Itemの引数の定義をそっくりそのまま持って来るんだけど、↓で簡単に取得できる
$md = new-object System.Management.Automation.CommandMetadata (get-command New-Item)
[System.Management.Automation.ProxyCommand]::Create($md)

$PSBoundParameterはハッシュテーブル型の自動変数で、呼び出された時の関数の引数とその値がセットされる
@演算子はハッシュテーブル(を入れた変数)をコマンドの引数:値の形に展開してコマンドに渡す

詳しくは↓辺りを参考に
ttp://blogs.msdn.com/b/powershell/archive/2009/03/13/dir-a-d.aspx

引数のセットを簡単にパススルーできるから、コマンドレットの機能を拡張したい時に便利



ということは誰も聞いちゃいないよね
337330:2010/10/24(日) 07:53:06 ID:m2Laz9J2
家のPCで、チマチマした環境設定時にPowerShell使ってるレベルです。
やってるのはDosでも出来る内容ですが、PowerShellで出来た方が先々利用範囲も広かるカナ?・・と。
自分のレベルだと >>336 を理解出来るまで10万年位掛かりそうですが、外部コマンドを気長に調べてみます。
>>335 様アリガトんです。
338名無し~3.EXE:2010/10/24(日) 21:13:16 ID:SrZeX/RN
>>337
すでにmklinkがある状況でPowerShellでできるようにするメリットがあんまりね
>>336はなるもんはなるって思っておけば大して難しくはないよ
339名無し~3.EXE:2010/10/26(火) 01:48:51 ID:rz27zGHO
>>330 じゃないんですが、シンボリックリンクやジャンクションを簡単に見分ける方法ないですか?
cmd.exeのdirだと<JUNCTION>とか出るんでgrepでもかければいいんですが、
Get-ChildItemだとでないよウワァアアアン!!!

>>337
俺も同じレベルでワロタww
340名無し~3.EXE:2010/10/26(火) 07:15:49 ID:hxPkE2FM
Attributesプロパティで見れるだろ(ReparsePoint)
シンボリックリンクとジャンクションの見分けは知らんが
341名無し~3.EXE:2010/10/26(火) 15:02:36 ID:wfOg8uoQ
スクリーンセーバー起動中なら何もせずに抜けたいんですが
判定方法教えてください。
342名無し~3.EXE:2010/10/26(火) 21:44:11 ID:8GuP2PJG
>>341
試してないから動くかしらんが
tp://rararahp.cool.ne.jp/cgi-bin/lng/dotnet/dotnetlng.cgi?print+200609/06090013.txt
343名無し~3.EXE:2010/10/30(土) 15:17:04 ID:MMhwI+bg
会社じゃOSに最初から入っている物しか使えないからwindows7が普及するまで使えないなー
344名無し~3.EXE:2010/10/30(土) 18:35:50 ID:TDSm+zBH
うちの会社は俺が使用申請(というほどのものじゃないが)したらいつの間にか他のPCでも使えるようになってた
大変重宝させてもらっております
345名無し~3.EXE:2010/10/30(土) 20:06:09 ID:SRaqWDov
PowerShellってとにかく情報量が少なすぎる
どこから手を付ければいいかわからない

丁寧な入門サイトでも作れば寝てても金入ってくるようになるだろうな
346名無し~3.EXE:2010/10/30(土) 22:06:30 ID:QEBlTJh4
get-helpがあるじゃないの
347名無し~3.EXE:2010/10/30(土) 22:47:20 ID:TDSm+zBH
入門的な情報ならそれこそヘルプファイル見ればいいだろって思うが
せっかく2.0からchm形式でまとめられてるんだし
348名無し~3.EXE:2010/10/30(土) 23:06:05 ID:gH1hrjV8
ヘルプってのはある程度分かっている人がちょっと確認するためのもの。
「○○するには」形式で自然とPowerShellの仕様を学んでいけるようなものがあるといいな。

349名無し~3.EXE:2010/10/30(土) 23:24:16 ID:7K64xf7J
○○の部分を英語にしてGet-CommandでOK
350名無し~3.EXE:2010/10/30(土) 23:39:28 ID:nmIDwOYm
>>347
chmになってヘルプに関してはようやくまともになったね。
manとかget-helpなんて使う気になれない。
でもこれは入門書としては使えない。あくまでリファレンス。
改めてISEに付いてるヘルプ見返してみたけど
初めてやる人にこれ見ておぼえろってのは酷なものがある。

>>349
全然OKじゃない。
351名無し~3.EXE:2010/10/31(日) 00:35:20 ID:Zwsqz6fj
get-help aboutとかやってみてよ。それでもわからんならしらんわ
352名無し~3.EXE:2010/10/31(日) 01:46:45 ID:TGWeicMQ
チュートリアル的な部分は、現状で十分揃ってると思うけど(それこそ「○○するには系」の部分)
検索の仕方が悪いんじゃないか?

俺はコマンドプロンプトくらいしか使ってなかったけど、
1.0リリース当時でも「DirectX使ったゲームの作り方が何処にもねぇぞゴルァ」ってくらいだった
そういう風にPowerShellのそもそもの用途を勘違いしてなければ、今なら情報少ないってこたない
353名無し~3.EXE:2010/10/31(日) 02:33:50 ID:wIwgZqqk
C/C++より習得困難です
情報の質も量もありません
354名無し~3.EXE:2010/10/31(日) 07:09:23 ID:vhI6szu3
>>351
だから何度も言われているようにヘルプは入門書にはならないのよ。
こんなテキストだけの情報ずらずら出されて読む気になるわけ無い。

>>352
情報があるだけじゃだめ。
検索の仕方が悪いとかそういう言い訳しなきゃいけないってことは入門者には使えないって事。
文章を読みやすく、読む気にさせるには適度に図を入れるのが効果的だけど
所詮ヘルプだからそういうものもない。

きっちり学ぶなら書籍のインアクションがいいんだろうけどヘビーすぎる・・・
355名無し~3.EXE:2010/10/31(日) 07:22:45 ID:cGFFgthS
で?
356名無し~3.EXE:2010/10/31(日) 09:08:54 ID:BkTaM9ni
俺はコマンドラインをほとんど使わなかったけど、
bashをちょっといじったらPowerShellも使えるようになったぞ。
357名無し~3.EXE:2010/10/31(日) 11:31:08 ID:jkMsg73b
>入門者
>bashをちょっといじったら

前提が違うから話がかみ合うわけがねーなw
358名無し~3.EXE:2010/10/31(日) 13:00:10 ID:XFVi38TJ
よし、次期OSのWindows8からはDosは無くそう。
素人も玄人もPowerShellオンリーで!
359名無し~3.EXE:2010/10/31(日) 17:48:29 ID:TGWeicMQ
そもそも誰もどういう習得レベルの人を指してるのか言ってないしなぁ

プログラミング自体全く知らない人向けなら↓
ttp://journal.mycom.co.jp/articles/2008/11/12/powershell/index.html
ttp://journal.mycom.co.jp/column/powershell/001/index.html

>>354
「PowerShell」とか「PowerShell 入門」というキーワードですら検索できないなら、そら悪いとしか言いようがないじゃん?

360名無し~3.EXE:2010/11/01(月) 22:17:37 ID:bnaHOs1x
>>359
プログラミング自体全く知らない人にはそれは難易度高すぎ。
プログラミングを多少かじったことある人向けの「Powershellの」入門ページだよそれは。
このレベルの入門ページならいくつもあるけど
「こういうことがしたい」をスラスラ実現できるレベルになれるページが無いんだよね。
361名無し~3.EXE:2010/11/01(月) 22:31:10 ID:NTy6dz0H
>>360

PowerShellの想定ユーザー(プログラマ)層って、
主にサーバー管理者じゃないの?
初体験には向いていないんじゃないかな。
例えば、オブジェクトパイプは強力なので、
オブジェクトパイプ前提でプログラムしちゃうけど、
他の言語へは応用利かないし。
362名無し~3.EXE:2010/11/02(火) 02:48:27 ID:1r9Q/V0z
>>360
インストール方法しか書いてない記事の難易度高過ぎってのは、単にやる気がないだけ。

>「こういうことがしたい」をスラスラ実現できるレベルになれるページが無いんだよね。
具体例にどういうものを指しているの?
なんでも自分で試行錯誤しようとしない限り習得なんて無理だよ。
「〜したいとき、〜するには」集ってのは、それこそ単なるリファレンスに過ぎない。

363名無し~3.EXE:2010/11/02(火) 06:56:42 ID:n3uvAciO
>>361
言語仕様が複雑で初体験には向いていないと思う。
ただ>>360>>359の記事が"プログラミング自体全く知らない人向け"って事への突っ込みだと思う。
本当の入門として見ると端折りすぎて使えない。

>>362典型的な駄目人間。
やる気がないとか分からない方が悪いとか言って逃げるのは簡単。


364名無し~3.EXE:2010/11/02(火) 07:16:34 ID:X1+7vei4
分からない分からないと言うだけで、
何が分からないのかも言わない奴が人を駄目人間呼ばわりとは。
365名無し~3.EXE:2010/11/02(火) 20:12:13 ID:Ex5X077/
>分からない分からないと言うだけで、何が分からないのかも言わない
これはこれで正しい。
それを引き出すのが役目なのに仕事放棄したら駄目人間って言われても仕方ない。

366名無し~3.EXE:2010/11/02(火) 21:21:43 ID:X1+7vei4
お前は何の話をしてるんだ? 会社の上司か?
>>363>>362を駄目人間と言ってるが、
>>362にそんな仕事だの役目だのがあるわけないだろ。
367名無し~3.EXE:2010/11/03(水) 00:41:47 ID:U2bip9Lb
>>363,365
そりゃ受身の、自分から習得しようとする気のない人向けの入門なんて、義務教育以外ではそうそうないさ
(読んでるうちに意欲を持つようにメリットを伝えているものはあるかも知れんが)
そんなものをPowerShellやウェブ記事に求めるのはお門違い

# まあ仕事でそういう状況になった人の場合、それでも自分の分からないところを
# 相手(上司)に説明する義務があるから、大変だとは思うけどね
# やる気ないんだから何処が分からないのかも分からないだろうし
368名無し~3.EXE:2010/11/03(水) 06:26:09 ID:m9USIlUk
しかしつまらん流れだな
369名無し~3.EXE:2010/11/03(水) 07:12:36 ID:HheFvbO9
# ←使えない上司の見本

370名無し~3.EXE:2010/11/03(水) 13:45:09 ID:GA7pWDJ2
田中、こんなスレ見てないで仕事しろ
371名無し~3.EXE:2010/11/03(水) 18:46:56 ID:LcJzGJCd
でも実際こんなの使って何やってるのか興味はあるね
2,3バッチ処理組んだらもうあまりやることがなくなるから勉強にならない
372名無し~3.EXE:2010/11/03(水) 20:25:21 ID:siVJaQmE
実際に使っての感想じゃなくてアレだけど
http://blogs.technet.com/b/heyscriptingguy/
とか
http://blogs.msdn.com/b/virtual_pc_guy/
とか見てると結構使い所あるんだろう、という気にはなる。
373名無し~3.EXE:2010/11/03(水) 21:33:44 ID:fRc4wjI7
確かにWindowsのコマンドプロンプトやバッチファイル、
Unix系シェルやシェルスクリプトみたいなのに比べると
チュートリアルや逆引きがイマイチな感はある
374名無し~3.EXE:2010/11/04(木) 08:12:23 ID:Qd27c0cx
コマンドレットで用意されてないのは.NETフレームワークを直接使えるってところがポイントだから
逆引き的な物を求めると、PowerShell自体よりも.NETのライブラリの説明の方が多くなってしまう。

プログラマーの書いてるブログなんかだと、.NETフレームワークの知識は当たり前ってスタンスが多いから
そこで引っかかる人はいるかもね。
375名無し~3.EXE:2010/11/04(木) 08:33:11 ID:4fM8MB7r
Hello worldから始めるとかそういう説明がほしい
376名無し~3.EXE:2010/11/04(木) 08:52:33 ID:JO1fAwJu
つ Google
377名無し~3.EXE:2010/11/04(木) 22:01:36 ID:hCCCcNYL
>>375
変数とは箱ですよとか、そういうレベルの話?
378名無し~3.EXE:2010/11/05(金) 01:32:57 ID:nCkvBGi+
>>375

でもHello worldなんて、

'Hello world'

だけじゃん。
379名無し~3.EXE:2010/11/05(金) 08:46:49 ID:IgD6E8mL
ダイアログで表示してみそ
380名無し~3.EXE:2010/11/05(金) 08:48:34 ID:hFG8Ar7O
質問もネタがないなら無理して書き込まなくていいんだよ
381名無し~3.EXE:2010/11/05(金) 16:40:46 ID:NbwT/njN
'Hello world' | ogv
382名無し~3.EXE:2010/11/06(土) 05:44:54 ID:jAUY5ivR
最近PowerShell 2.0を使い始めましたが、ちょっと困っています。

chmやmanコマンドは例文も載っているしすごく便利でさすがMicrosoftだといたく感銘をうけているのですが、
PowerShell ISEでのmanやchmの表示だとテキストが折り返されず、
近年稀に見る横方向へのスクロールを頻繁に要求されます。

なんとか折り返しする方法ないもんでしょうか?

>>381
初めて知ったすごい
383名無し~3.EXE:2010/11/06(土) 16:00:07 ID:rWCK5t23
将来的にcomspecがPSに置き換わるみたいな発言ってMSからされてる?
384名無し~3.EXE:2010/11/06(土) 16:43:23 ID:XNO9DIsP
>>382

Windows PowerShell のヘルプ
ってPREタグ使っているんですね。これは厳しいな。

↓あたりで代用するのはいかが?
ttp://technet.microsoft.com/ja-jp/library/dd347701.aspx
385名無し~3.EXE:2010/11/06(土) 22:42:55 ID:bWokoIS3
やってできなくはないけどもっと簡単な方法を知りたい。
というか、>>384 が現実解だと思う。

試したこと
1.WindowsPowerShellHelp.chm をバラす (HTML Help Workshop とかで)
2.Classic.css を適当に編集 (幅を制限したりフォントサイズ変えたり背景に色を付けたり)
3.WindowsPowerShellHelp.chm を再度コンパイル
4.Firefoxに拡張機能の 「CHM Reader」を追加して Firefox で 作り直した .chm を読む

でかくてすまんがこんな感じ
↓オリジナルをFirefox開いた場合(切れて使い物にならない)
ttp://a-draw.com/contents/uploader2/src/a-draw1_0114.png
↓作り直したのを開いた場合(一応収まっている雰囲気)
ttp://a-draw.com/contents/uploader2/src/a-draw1_0116.png
ちょっと字を小さくしすぎたけど雰囲気はつかめると思う。

ちなみに作り直した chm を普通に開くと、どーんと横に伸びて盛大にスクロール()笑
繰り返しになるけど私なら >>384 を選ぶ……
386名無し~3.EXE:2010/11/06(土) 23:37:58 ID:dLzMEaz1
みてみたけどほんとだな
左ペイン非表示でちょうどになるような固定折り返し
開発者はどんだけ広いモニター使ってるんだw
387名無し~3.EXE:2010/11/07(日) 00:18:48 ID:I6Th6G3q
>>384
公式だと見やすいですね・・・。

あとはインスタントな検索さえ何とかなれば

>>384-385
本当だ。chmはソース見たら一部にpre入ってますね。

preが入っている箇所があるせいでスクロールバーはあるけれど、折り返しされていない箇所もある。
構文と例やabout_がpreになっているみたいですね。

Microsoftのどこに報告したら直してもらえるんだろ。
388名無し~3.EXE:2010/11/07(日) 00:20:56 ID:I6Th6G3q
コマンドラインだと折り返されるけど、ISEだと折り返されないので使い分けが入りますね。

unix使うことがあるせいかわからないときに、ふとmanしてしまうクセがあって
ISEだと折り返されてなくてがっかりみたいな状況でした

manしたら >>384 に検索投げればいいのかな
389名無し~3.EXE:2010/11/07(日) 00:21:47 ID:I6Th6G3q
> unix使うことがあるせいかわからないときに、ふとmanしてしまうクセがあって

unix使うことがあるせいか、わからないときにふとmanしてしまうクセがあって

訂正
390名無し~3.EXE:2010/11/10(水) 11:34:44 ID:lQVk4xAV
>>377
そういうレベルの話も必要な気がする
それ以前にまずシェルとして使う話のほうが要るか
391名無し~3.EXE:2010/11/10(水) 14:04:59 ID:ydcK/s6R
>>371

俺は鯖缶ではないけれど、こういうことをやっている:

・株のシステムトレード
・WWWその他のネットワークの調査
・テキストファイルの検索
・ファイルの整理整頓
・XML→HTML変換
392名無し~3.EXE:2010/11/10(水) 18:46:57 ID:lQVk4xAV
>>391
>・テキストファイルの検索
>・ファイルの整理整頓
>・XML→HTML変換

ここら辺ちょっとkwsk
393名無し~3.EXE:2010/11/10(水) 19:45:55 ID:ydcK/s6R
>>392

テキストファイル検索は単にGet-Content、%を使って、各行が正規表現にマッチするかどうか
調べているだけ。マッチしている行を抜き出したり、マッチしない行を削除したりとかやる。

ファイルの整理整頓は、まぁ、(dir -r | sort lastwritetime)[0]を消したりとか。ただ、dir -rは
重すぎるので、今はいくつかのプロパティを端折ったIo.FileInfoの配列を取得するようにしてる。

XML変換は汎用性の高いものじゃなくて、CLIXMLファイルからオブジェクトを読み込んで、
文字列などを<table>タグと一緒に結合して、HTMLにするだけ。
394名無し~3.EXE:2010/11/10(水) 23:47:25 ID:J6PGHoMb
MSはさっさとコマンドベースのエディタ標準でよういしろよ
できればvi系統望むけどね
395名無し~3.EXE:2010/11/10(水) 23:52:19 ID:lQVk4xAV
それはEDLINがあるじゃない
396名無し~3.EXE:2010/11/11(木) 00:26:17 ID:WrXU9cOf
数式以外でも TeX っぽく使える Word を用意してくれよ
ランポートもいるんだしさあ
397名無し~3.EXE:2010/11/11(木) 12:32:07 ID:rulRntah
>>396
オライリー本の原稿がasciidocで書かれてていてそこからdocbookに整形してあれこれやっていたりするし、
数式は外部プログラムと連携してなんとかするとして、レイアウトを割り切ればいけるんだけどねえ・・・
398名無し~3.EXE:2010/11/15(月) 16:23:32 ID:iZOP1DBq
ふむ。
399名無し~3.EXE:2010/11/15(月) 18:53:16 ID:u2ZsgJfV
>>393
遅レスになったが有難う。
400名無し~3.EXE:2010/11/18(木) 14:02:34 ID:IHRTyN0f
ちょ〜久しぶりにXPのWindows UpdateかけたらPowerShell 2.0が選択できるようになってた。
マジオススメ。
401名無し~3.EXE:2010/11/18(木) 21:14:22 ID:rbAHHsJc
何を今更
402名無し~3.EXE:2010/11/18(木) 22:10:43 ID:GgFULFC7
強制的にインストールしてほしい。無理か
403名無し~3.EXE:2010/11/19(金) 00:25:48 ID:xgbfXTN3
#ffmpeg.exeを使って動画のフレームサイズを取得してみた。

param([string]$FilePath)
if(!(Test-Path $FilePath)){return "Error"}
$FrameSize = ((.\ffmpeg.exe -i $FilePath 2>&1)[1].tostring().split("`n") |
  ?{$_ -match "Stream.*Video\:"}).split(" ") |
  ?{$_ -match "\d+x\d+"}
$FrameSize
404名無し~3.EXE:2010/11/26(金) 01:22:18 ID:1QRnQp7f
パイプラインで
Get-Child | &{process{$_}}
みたいにスクリプトブロックを使おうとしたら(この処理自体に意味はない)
・$_はprocessブロック内で使う
・呼び出し演算子(&)が必要
なのに対し、
Get-Child | Join-Path C:\hoge -ChildPath {$_}
のようにパラメーターにたいしてスクリプトブロックを使うと、
・$_を使うのにprocessブロック必要なし
・呼び出し演算子は不要。
・(-ChildPathはstirng型を受け取るけどなぜかスクリプトブロックを放り込める)

といった違いがあるんですが、パラメーター用のスクリプトブロックと普通のでは
扱いが異なるんでしょうか?そこらへんの解説が見当たらなくてモヤモヤしてます。
405名無し~3.EXE:2010/11/26(金) 21:03:12 ID:3vgrgtW/
get-content a.txt|set-content a.txt
で空にならないようにするには?
406名無し~3.EXE:2010/11/27(土) 06:03:46 ID:375zYAJo
古典的な方法だが、一旦別のファイルに退避
Windowsが持ってるtempフォルダ辺りなら、どうせ後々ディスククリーンアップで消されるし問題ないかな、と思う
407名無し~3.EXE:2010/11/28(日) 22:16:38 ID:xQRmFMA3
>>387
バグ報告や機能の提案はConnectでやってる
ttp://connect.microsoft.com/PowerShell
日本のフォーラムでもはっきり本家に伝えるよう主張しとけば連絡してくれるかもしれない
ttp://social.technet.microsoft.com/Forums/ja-jp/powershellja/threads


>>404
$_はprocess句でしか使えないので、スクリプトブロックから参照する場合はprocess句で利用することを明記しないといけない
コマンドレットの場合は、受け取ったスクリプトブロックをprocess節として実行するので、省略できる(明記もできる)けど
逆にbegin句やend句を入れたスクリプトブロックは渡すとエラーになる

スクリプトブロックのリテラルはそれだけだと実行されないのがPowerShellの仕様なので、呼び出し演算子が必要になる
コマンドレットは名前だけだと実行されるのが仕様なので、呼び出し演算子は不要(明記もできる)
この辺は使っていけば、その方が都合がいいからそうなってるってのは理解できると思う

どのパラメータがスクリプトブロックを受け付けるかは、そのパラメータ次第なのでなんとも
408名無し~3.EXE:2010/11/28(日) 22:25:50 ID:xQRmFMA3
>>405
カレントドライブがC:\だとして、
${C:a.txt} = cat a.txt
という書き方はできる
(PowerShellの場合ドライブ名の後の\を省略するとカレントドライブ上のカレントディレクトリを指す)
409名無し~3.EXE:2010/11/29(月) 00:26:50 ID:xPcrInjE
>>407
scriptblock型以外を受け取るパラメーターにスクリプトブロックを与えると、
実行した戻り値をパラメーターに与えてくれる動作のようですね。
当初不思議に感じましたが、このほうが便利だとは思います。
410名無し~3.EXE:2010/11/29(月) 17:13:26 ID:1ekoy0DS
iseのhelpだけ直接開けない?
411名無し~3.EXE:2010/11/30(火) 10:45:22 ID:7l2YyZqp
>>410
Process Explorerで調べたが別プロセスじゃないなこれ
412名無し~3.EXE:2010/11/30(火) 15:06:03 ID:nz2Z0qc4
2.0対応の連載記事マダー
413名無し~3.EXE:2010/12/01(水) 12:31:36 ID:fdrGBZ+Z
import-csvの入力csvにheaderは必須なのか
414名無し~3.EXE:2010/12/04(土) 08:06:00 ID:aYVvvjBi
ruby -x "%~0"
goto :eof

#!ruby
puts "hello"

みたいにバッチとpsを混在させる技ってないですか?
-commandだといろいろしんどい。
415名無し~3.EXE:2010/12/04(土) 15:41:01 ID:SIs0YMby
powershell2cmd
416名無し~3.EXE:2010/12/04(土) 22:37:15 ID:Pxbx6jFc
おーいー、今度こそin Action SE発売かと思ったらまた2月に延期かよwwww
417名無し~3.EXE:2010/12/05(日) 00:13:20 ID:BWsGjRXn
@more +1 %0 | powershell -command - & goto :eof
418名無し~3.EXE:2010/12/10(金) 20:55:27 ID:ezhmZQMF
powershell -file .\hoge.ps1
はerrorlevel変えるが、
powershell -command .\hoge.ps1
はerrorlevel 1固定?
なんで?
419名無し~3.EXE:2010/12/11(土) 04:20:46 ID:yrJ1r84X
基本スクリプト内のexitはスクリプトを終了させるだけなので、
終了コードを受け取るのは呼び出したpowershell自身
だから -command の場合は明示的に exit $LASTEXITCODE と付け加えないと
powershell.exeを呼び出した側には終了コードが渡らない

-File の場合は指定したスクリプトしか実行しないから、
直接powershell.exeを呼び出した側に終了コードを渡すようにしたんだと思う
その方が都合がいいとは思うけど、内部でどういう仕組みなのかは知らね
powershell -command "iex (type.\hoge.ps1)"
の糖衣構文だとでも思っておけばいいんでないか
420名無し~3.EXE:2010/12/11(土) 23:52:29 ID:wRSL0Vtb
v1のexitにexitcodeがなくて-commandにもなかった
v2で追加して、追加の-fileで使った んじゃね
421名無し~3.EXE:2010/12/12(日) 00:40:58 ID:Q1yjoKBa
んなこたーない
びっくりしてv1入れて確認しちゃったじゃないか
422名無し~3.EXE:2010/12/12(日) 17:53:21 ID:s2HYAuWp
わざわざ0以外を丸めて1にしてるみたいだにゃ
423名無し~3.EXE:2010/12/14(火) 00:41:18 ID:jfaAQZ02
ほんとだ、-command で最後に実行したスクリプトの終了コードに反応してはいるみたい
424名無し~3.EXE:2010/12/15(水) 04:25:13 ID:z+6FAKox
空のディレクトリを調べたいのですが、

Windows PowerShell Tip: Finding All the Empty Folders in a Directory Tree
http://technet.microsoft.com/en-us/library/ff730953.aspx

このページのMicrosoftのTechNetのページのTipsの方法では

(gci C:\Scripts -r | ? {$_.PSIsContainer -eq $True}) | ? {$_.GetFiles().Count -eq 0} | select FullName

のGetFiles()がディレクトリを含めないため、ディレクトリのみを含むディレクトリも空とみなされてしまいます。

(gci C:\Scripts -r -fo | ? {$_.PSIsContainer -eq $True}) | ? {$_.GetFiles().Count -eq 0 -and $_.GetDirectories().Count } | select FullName

このようにディレクトリ数も数えたところ今のところ上手く行っているようなのですが
TechNetの記述がおかしいのはともかく、もっと簡単に空かどうか調べられる方法があれば、と思った次第です。

該当のクラスはSystem.IO.DirectoryInfoのようですが、
意図的にはGetFilesはFileInfoのみの列挙、GetDirectoriesはDirectoryInfoのみの列挙なのだろうとは思いますが・・・
DirectoryInfo Class (System.IO)
http://msdn.microsoft.com/en-us/library/8s2fzb02(v=VS.85).aspx


425名無し~3.EXE:2010/12/15(水) 05:36:17 ID:z+6FAKox
Get-ChildItemなどでパスが長いと

> Get-ChildItem : 指定されたパス、ファイル名、またはその両方が長すぎます。完全限定型名は 260 文字未満
> で指定し、ディレクトリ名は 248 未満で指定してください。

このようなエラーが出てしまいます。
.NETのPathTooLongException例外であるとわかったのですが、

PathTooLongException クラス (System.IO)
http://msdn.microsoft.com/ja-jp/library/system.io.pathtoolongexception.aspx

これはどのように回避したものでしょうか?

Long Paths in .NET, Part 1 of 3 [Kim Hamilton] - BCL Team Blog - Site Home - MSDN Blogs
http://blogs.msdn.com/b/bclteam/archive/2007/02/13/long-paths-in-net-part-1-of-3-kim-hamilton.aspx

こちらのブログを見つけて

というのも試してみたのですが、

gci \\?\D:\ としても、

> Get-ChildItem : 引数 "path" の値が無効なため、引数を処理できません。引数 "path" の値を変更し、操作
> を実行し直してください。

と言われてしまいます。PowerShellでは長すぎるパスは処理できないのでしょうか?
426名無し~3.EXE:2010/12/15(水) 06:35:52 ID:rBqeEQFs
>>424
gci C:\Scripts -r -fo|?{$_.PSIsContainer}|?{!(gci $_)}
とか?
427名無し~3.EXE:2010/12/15(水) 14:42:50 ID:LNVP413i
>>425

ファイルシステムの制限を超えたことはできないよ。
428名無し~3.EXE:2010/12/15(水) 20:11:34 ID:4HSayuWm
スクリプトファイルをiseで実行して閉じるってどうやる?
429424:2010/12/16(木) 01:18:26 ID:TEM/+BiA
ありがとうございます。

>>424 のselect FullNameですが、画面に出したりテキストに出力するなどすると途切れてしまうようなので、
| % { $_.FullName } でフルに出力するといけるようでした。
selectにフル表示のオプションがあるのかも知れないですが、
エラーも出ないので気づかないとこちらもはまりますね。


それよりももっと長いパスでは >>425 のエラーがどうしてもでるので、
どうにも試して上手くいかなかったためcygwinでfindで処理したらパスが長くてもあっさりいけてしまいました、、、

find 'D:/' -type d -empty

この後の処理もできれば(cygpath -w などでWindowsのパスに変換して)PowerShellでやりたかったのですが、
長いパスが処理できないようなのでcygwin上で処理しました。


PowerShell自身はオブジェクトのままパイプ通したり扱えるし、スクリプト言語のようにも使えるし
使えると思っていたのですが、いざというときにちょっとした制約があるものですね。
使い分けが肝心ということで、、


430名無し~3.EXE:2010/12/16(木) 17:29:24 ID:NgwmpoE4
>>428

良く意味がわからん。

スクリプトファイルの実行が終了したら、そのファイルが開かれたままってことはないだろう。というか、
実行前にファイルは全部読みこまれるので、実行前に既にファイルは閉じられている。
431名無し~3.EXE:2010/12/21(火) 15:34:02 ID:WKfUEog4
うむ。
432名無し~3.EXE:2010/12/21(火) 21:59:12 ID:hMuBaOW4
多分 powershell.exe の -File オプションのようなものはないかってことを聞きたかったんだと思うよ
433名無し~3.EXE:2010/12/29(水) 16:00:28 ID:oIs/GS4R
こういうこともできたんだね、ちゃんと使えるようになれば面白そう
Excel PowerShell Console
ttp://excelposh.codeplex.com/
434名無し~3.EXE:2010/12/30(木) 19:56:05 ID:OrIrurlj
ExcelのVBAを廃止してExcel PowerShellにしてほしい。
435名無し~3.EXE:2010/12/30(木) 20:34:11 ID:Q7/xd44P
PowerShell良いんだけど
スクリプトファイルの実行に、管理者権限で設定変更必須なのがちょっとなあ。

会社のPCが、WinServer2008R2 (リモートデスクトップ) になったんだけど
Set-ExecutionPolicyが許可されないから、結局WSH使ってるorz
436名無し~3.EXE:2010/12/30(木) 23:14:57 ID:xW3gQ5+X
ps1の実行には必要でもps1を読んで実行する分には必要ない
437名無し~3.EXE:2010/12/30(木) 23:36:56 ID:Q7/xd44P
そりゃそうなんだが、タスクスケジューラに登録して色々やりたい時とかはちょっと。
438名無し~3.EXE:2010/12/31(金) 10:12:57 ID:cqeEoIvK
ファイルの中身を読んで iex するためのコマンドを powershell.exe の引数に設定するんだ
439名無し~3.EXE:2010/12/31(金) 17:12:46 ID:FEEXtTla
>>226-227 >>417 とか
440名無し~3.EXE:2010/12/31(金) 23:14:57 ID:wALN4H1m
>>434
そんなもん要らんからとっとと.NETに統合して欲しいわ
441名無し~3.EXE:2011/01/02(日) 19:30:45 ID:MeBYiTbW
〜すれば出来るとかじゃなく
自分で書いて自分で実行するときくらいは
デフォルトでさくっとやらせろよというのはもっともな意見だな
VistaのUACも7で改善されたようにちょっとは緩めてもいいんじゃないかね
442名無し~3.EXE:2011/01/02(日) 19:42:27 ID:ba6EMIda
悪意の有るスクリプトファイルを実行してしまう事が無い様に、って配慮は理解出来なくも無いんだが
結局.jsや.vbsはそのまま実行されてしまうので、何だかなあという感じはする。

WSHを廃止する訳でも無いし、.ps1だけ防いでもなー。
443名無し~3.EXE:2011/01/03(月) 13:06:32 ID:QvqUXEar
WSHは将来廃止するんでしょ。
とはいっても結構WSH使ってるところ多そうだよな
444名無し~3.EXE:2011/01/03(月) 15:49:18 ID:llN7wQAz
JScriptやVBScriptどころか、未だにバッチファイルも使えるからなあ
445名無し~3.EXE:2011/01/03(月) 17:27:47 ID:aYwe+7LV
>>444
言語とホストぐらい区別しろよw
446sage:2011/01/11(火) 12:11:27 ID:AySeXxV9
outlookで特定のフォルダ(自作した)って、どうやって取得すればいい?
447名無し~3.EXE:2011/01/11(火) 16:32:47 ID:nsxz/nqp
>>442
意図しないスクリプトが動くのはUACでは防げないからね
Windows自身が重要だと思っているところを変更しようとするものは防げるみたいだけど

Google Chromeなんて、ユーザーの領域にインストールするじゃないか

その用途なら統合的なAntiVirusソフトについてくるHIPSのようなものが必要だろう
ただ、あの類は日常的にスクリプト組んで他のスクリプトや実行ファイルと連携しようとする人間には
猛烈に面倒だがなw



448名無し~3.EXE:2011/01/29(土) 21:30:25 ID:3NcLi25X
コマンドラインに
1..3 | % { "abc" }
と入力すると abc が3行表示されるけど、パーセントはどういう役割をしているの?
449名無し~3.EXE:2011/01/29(土) 21:32:56 ID:h8hxi8WH
>>448
ForEach-Objec のエイリアス
450名無し~3.EXE:2011/01/29(土) 21:39:34 ID:3NcLi25X
う。「自己解決しますた」と書きにきたら、先にレスがw
ありがとう

書き込みは過疎ってるけど読んでる人は多いのか
451名無し~3.EXE:2011/01/30(日) 12:19:59 ID:RCNGNI82
ネイティブでサポートされてる以外のプロバイダって、何がある?
SQL Server 2008 だけかね
452名無し~3.EXE:2011/01/30(日) 14:33:53 ID:QbOtA8We
そんなことナイアルヨ
453名無し~3.EXE:2011/02/02(水) 22:15:27 ID:HQFw3HGM
おお、In action SEが予約できるようになっとるでよ・・・
454名無し~3.EXE:2011/02/03(木) 21:49:02 ID:0t6u2ldF
それ、良い本なの?
きのう密林でクックブックをポチったところなのに
455名無し~3.EXE:2011/02/03(木) 22:45:31 ID:jAArJwWA
いい本だよ。全て読み終える頃にはきっと君もアメリカンジョークの達人になっているはずだ。
456名無し~3.EXE:2011/02/06(日) 22:21:55 ID:ktUIhzGg
あ、あれ・・・?なんでこの期に及んで6月まで延期なんだSE
457名無し~3.EXE:2011/02/07(月) 05:44:01 ID:K33ojtoU
PC買い換えたらようやくPowerShellが実用的な起動、実行速度になったぜ
458名無し~3.EXE:2011/02/11(金) 10:15:57 ID:8GDoLqoO
ウチの職場で、PowerShellの話をしたら
全員揃って「何それ?」だった

これでもIT系の部門なんだぜ…嫌になるわ
459名無し~3.EXE:2011/02/11(金) 17:59:32 ID:IasKR8uY
全員揃っておまいを嫌いになるわ
460名無し~3.EXE:2011/02/12(土) 10:19:49 ID:Lu+rZkPF
PowerShellを知らないようでは、秀丸とかLinuxとかも知らなそうだな。
461名無し~3.EXE:2011/02/12(土) 13:12:32 ID:h6FxMxP4
秀丸 → 使ってるけど金は払っていない
Linux → 知ってるけど使った事は無い
WinVista/Win7 → アクティベーションせずに試用期間のまま使う、試用期間(30日*3)切れたらバックアップから復元する

有名大企業の地方子会社でもこんなもん。
「これはおかしいんじゃないでしょうか」って上司に言っても、「こういうルールだから」とか言いやがる。
462名無し~3.EXE:2011/02/12(土) 18:56:27 ID:5bCNTCZw
まぁPowerShellはずいぶん前からあるけど、
Win7が普及してくると、それなりに使われだすんじゃないかな
463名無し~3.EXE:2011/02/12(土) 20:37:49 ID:vzQzS4z5
Win7でもだいたいコマンドで出来ちゃう
464名無し~3.EXE:2011/02/12(土) 23:59:20 ID:uDGlqv/T
" とか入力して改行した後に複数行のテキスト貼り付けて、矩形選択コピーとか
何もインストールされて無い状態では結構重宝する
CLI使わないって人でもこういうのは便利だと思う

まあcmd.exeでできるからpowershellでもできるってだけだが
465名無し~3.EXE:2011/02/14(月) 17:39:54 ID:7wTobONj


PowerShell初心者です。

WiimoteLib.dllをPowerShellで使って
これをPowerShellにしたいのですが
どうすればよいでしょうか
C#のソースらしいですが

Dim btclient As New InTheHand.Net.Sockets.BluetoothClient
Dim btdevs() as InTheHand.Net.Sockets.BluetoothDeviceInfo
btdevs = btclient.DiscoverDevices
For Each btdev In btdevs
If btdev.DeviceName.Contains("Nintendo") Then
InTheHand.Net.Bluetooth.BluetoothSecurity.RemoveDevice(btdev.DeviceAddress)
btdev.SetServiceState(InTheHand.Net.Bluetooth.BluetoothService.HumanInterfaceDevice,False)
btdev.SetServiceState(InTheHand.Net.Bluetooth.BluetoothService.HumanInterfaceDevice,True)
End If
Next btdev
466名無し~3.EXE:2011/02/14(月) 19:32:35 ID:xf2sMH1y
>C#のソースらしいですが
どう見てもVBじゃね…?
467名無し~3.EXE:2011/02/14(月) 20:14:43 ID:tzKzWSnM
クレクレ厨か
468名無し~3.EXE:2011/02/14(月) 20:55:23 ID:FTtW58t4
「VBScript から Windows PowerShell へ」
http://technet.microsoft.com/ja-jp/scriptcenter/dd772285.aspx
469名無し~3.EXE:2011/02/14(月) 22:52:04 ID:FTtW58t4
powershell load dllでググったらDLLをロードするサンプルが出てくるな
あとは>>468でなんとかなるだろう
470名無し~3.EXE:2011/02/15(火) 09:40:23 ID:RgLpwBr8
毒蛾ります。
471名無し~3.EXE:2011/02/19(土) 15:06:01 ID:GT9DeNZI
バッチに限らず、複数のスクリプトが同時に走るとディスクアクセスが集中してうれしくない場合、
簡単にキューイング、排他制御する方法ってないですか。

各スクリプトはスケジューラだったりExplorerからSendToされたりコマンドラインから実行されたりいろいろです。

今はウィンドウタイトルに★があったら1秒待機、
なかったらウィンドウタイトルに★を付けて実行というおまぬけなことをやってますw

あとはテキストにコマンドを追記していってそれを読み取って連続実行するコマンドでも作るくらいですかね。
472名無し~3.EXE:2011/02/22(火) 16:55:29.01 ID:5J1jjSgs
それこそlockとれば?
473名無し~3.EXE:2011/02/26(土) 00:20:51.57 ID:TEYLVMHl
Vista で PowerShell が重要な更新に入ったらしいけど、XP でも入ってるのかな?
474名無し~3.EXE:2011/03/10(木) 23:06:42.43 ID:KvHq7ulM
行のはじめに、"・ソ" とでてしまうのですが、
削除する方法はありますか。
475名無し~3.EXE:2011/03/10(木) 23:35:34.28 ID:vAsneVrk
cat hogehoge.txt -Encodin UTF8 ってしてあげればいいと思うよ
476名無し~3.EXE:2011/03/10(木) 23:51:28.36 ID:KvHq7ulM
書き込み、助言、ありがとうございます。
説明が足らず、すみません。-encoding ではだめなのです。

PS C:\> cat C:\test1.csv
2011031023
PS C:\> cat C:\test1.csv -encoding UTF8
2011031023

なのですが、エクセルで開くと、

"・ソ2011031023" となっていて読み込みに失敗してしまいます。
477名無し~3.EXE:2011/03/11(金) 00:02:19.83 ID:KvHq7ulM
474です。
もともと、エンコードはUTF8なのですが、もしかしたらBOM付きが原因なのでしょうか。
BOMはずすコマンドをご存知なら教えていただきたく、よろしくお願いします。
478名無し~3.EXE:2011/03/11(金) 00:09:28.66 ID:ZlDRL97U
Import-Csv test1.csv | Export-Csv hoge.csv -Encoding ASCII
479名無し~3.EXE:2011/03/11(金) 00:17:06.92 ID:CFYbV0Sz
474です。 UTF-8N というのに変えたいのですが・・・。
どなたか、ご存知の方がいれば、ご教示ください。

PSで処理したいので、エディターで開いてやればよい、というのは、抜きでお願いします。
480名無し~3.EXE:2011/03/11(金) 00:21:45.60 ID:CFYbV0Sz
474です。
478さん、ありがとうございます。
試してみました。が、見事に消えてなくなりました。
Export-Csv hoge.csvは、残念ながら、何も出力されませんでした。
お力添えには、感謝いたします。
481名無し~3.EXE:2011/03/11(金) 00:36:50.98 ID:CFYbV0Sz
474です。

get-contentでうまくいきました。UTF-8Nではないですが、私のケースはASCII
で問題は解決できました。
478さん、感謝いたします。

get-content C:\test1.csv| out-file C:\test2.csv -encoding ASCII

PSではないですが、文頭に「繝サ・ソ」という文字が勝手に挿入されているという下記のリンクページが
私のケースににていました。ご参考までに。
ttp://oshiete.goo.ne.jp/qa/6511455.html
482名無し~3.EXE:2011/03/11(金) 05:40:11.03 ID:9wCmu9d1
Excel2003,2007はBOM関係なくUTF-8のCSVを開くと文字化けするらしいよ
2010では大丈夫らしいけど

ASCIIで出力した場合は日本語文字がないならいいけど、
そうじゃないならdefault(Shift_JIS)のほうがよくね?
Unicode文字があるならunicodeのほうがいいかも
483名無し~3.EXE:2011/03/11(金) 13:56:25.21 ID:9/79SQiT
池沼動画age

windows powershellの?ってなに?
http://www.nicovideo.jp/watch/sm12716054
484名無し~3.EXE:2011/03/15(火) 22:19:30.25 ID:3J0P2gTc
数百行以上のCSVファイルの最後の十行に含まれる、文字のバイト数を数える方法を
ご存知の方、お知恵をお借りしたいのですが。
485名無し~3.EXE:2011/03/16(水) 19:24:20.36 ID:h9ZUcVD1
最後の行の文字数のことか?
486名無し~3.EXE:2011/03/16(水) 22:34:07.23 ID:bDBA47t2
説明不足ですみません。
可変長のCSVファイルの最後から数えて十行目から最後までの文字のバイト数です。
例えばですが、以下の例ですと、10234行目から10243行目のバイト数が知りたいのですが、
1. aaa,bbbbbbbb,cccc,d
2. eee,ffffff,gggg,hh



10234. dfdf,ghghghgh,ekekekeke,t
10235. rerere,hwhwhwhwhwhw,aaa,bbbbb
10236. mnmnmnmnmnmnmnm,hh,bvbvb,wqwqwqwqwqwqwq
10237. he,g,bb,h
10238. awawaw,gigigigi,h,kkkkkkk
10239. fgf,rururururururuururururuururu,g,ppp
10240. n,qwqwqwqwqwq,zxzxz,ee
10241. cdc,d,tytytyty,eo
10242. nhnhnhnhnhnhnhnhnhnn,h,ww,qoqoqoqo
10243. zh,rererere,hshshs,e
487名無し~3.EXE:2011/03/16(水) 23:57:32.76 ID:gIpVeMdF
最後の10行ってのは Select-Object -Last 10 すればよいけど、
バイト数ってのがね。
元のテキストファイルそのままの漢字コードでのバイト数を算出したいんだよね?
488名無し~3.EXE:2011/03/16(水) 23:57:44.52 ID:yqLbCDd0
こんな感じ?
[System.Text.Encoding]::Default.GetByteCount($(gc foo.csv | select -last 10))
489名無し~3.EXE:2011/03/18(金) 17:33:35.86 ID:crr9Lo3L
484です。487さん、レス、ありがとうございます。
488さん、完璧です。解決しました。

[System.Text.Encoding]::Default.GetByteCount($(gc foo.csv | select -last 10))
で出た数値に改行コード分11バイトを足して、
$TextFilePath = 'foo.csv'
$BytesToRead = 280
$fs = [System.IO.File]::OpenRead($TextFilePath)
$fs.Position = $fs.Length - $BytesToRead
$sr = New-Object System.IO.StreamReader($fs)
$text = $sr.ReadToEnd()
$fs.Close()
$text
で最後の10行をきちんと切り出せました。


490名無し~3.EXE:2011/03/18(金) 17:37:11.15 ID:crr9Lo3L
おっと、$sr.Close() を忘れてました。
とにかく、488さん、ありがとうございました。
491名無し~3.EXE:2011/04/04(月) 16:24:43.09 ID:hKrJP+ng
管理者権限で実行しているかいないかで分岐させたいのですが、どのように記述すれば良いでしょうか
492名無し~3.EXE:2011/04/05(火) 18:26:43.91 ID:fuIR9JzL
IsUserAnAdmin
493491:2011/04/06(水) 08:39:52.14 ID:89JOY3lf
ありがとうございます
管理者権限の有無を取得できました

Add-Type -Language VisualBasic @'
Public Class Shell32
Declare Function IsUserAnAdmin Lib "shell32.dll" () As Integer
End Class
'@;
[Shell32]::IsUserAnAdmin();
494名無し~3.EXE:2011/04/06(水) 20:52:33.60 ID:FwlNhF2r
わざわざ何か呼び出さなくても、管理者で実行すれば
ウインドウタイトルが「管理者: Windows PowerShell」ってなってない?
495名無し~3.EXE:2011/04/07(木) 23:31:20.26 ID:J066Q2/Y
わざわざ何か呼び出さないと
ウインドウタイトルが「管理者: Windows PowerShell」ってなってないかわからんだろ?

496名無し~3.EXE:2011/04/07(木) 23:53:56.33 ID:4AeXG/WF
>>491は$host.UI.RawUI.WindowTitleで判別できるってことでは?
497名無し~3.EXE:2011/04/08(金) 08:58:31.11 ID:Fz+UjjpP
逆にめんどいだろそれ…
498491:2011/04/08(金) 10:14:46.83 ID:/A/kzZqw
ありがとうございます
タイトルバーから取得するのには気付きませんでした。申し訳ありません

$isUserAnAdmin = $host.UI.RawUI.WindowTitle -like '管理者*';
499名無し~3.EXE:2011/04/08(金) 17:31:00.49 ID:7j8xG3bJ
title 管理者: Windows PowerShell
ってやってたら?
500名無し~3.EXE:2011/04/09(土) 04:58:40.13 ID:FiUjtn26
管理者になれる?
501名無し~3.EXE:2011/04/11(月) 22:46:41.18 ID:jyLkgmXv
>>499
自分の環境で動けばいいスクリプトは性善説が俺のジャスティス
502名無し~3.EXE:2011/04/12(火) 03:59:49.24 ID:rW5IMZ0k
ジャスティス って?w
503名無し~3.EXE:2011/04/12(火) 23:12:49.06 ID:JNdfjuFw
ためらわないことさ
504名無し~3.EXE:2011/04/13(水) 05:08:27.55 ID:DqleROdj
ジャスティスにそんな意味ないだろ
505名無し~3.EXE:2011/04/13(水) 07:34:32.77 ID:ytIqcvkF
まあ元々それ自体に意味のある言葉じゃないからな
506名無し~3.EXE:2011/04/13(水) 18:03:16.58 ID:DqleROdj
なにそれ?あーとかうーとかじゃねーよばか
507名無し~3.EXE:2011/04/13(水) 19:58:12.91 ID:aEiKRMAH
>>501のジャスティスというのは無意味なのか。
508名無し~3.EXE:2011/04/13(水) 20:29:39.56 ID:omXECsKr
他人から見ればそう見えることもあろう
509名無し~3.EXE:2011/04/13(水) 21:25:45.57 ID:vfhrpCYi
それでも言うべきことは言う
それが俺のジャスティス
510名無し~3.EXE:2011/04/14(木) 00:58:37.70 ID:7EgR4Ksy
それはお前の無学
それも言うならジャッジメントだろw
511名無し~3.EXE:2011/04/14(木) 01:09:00.56 ID:3k7zk3vE
おまいら細かいこといいだろう。ジャスティス=正義っていみで
それ以外は邪道意味だよ。
512名無し~3.EXE:2011/04/14(木) 01:11:34.25 ID:7EgR4Ksy
お前の頭では正義の反対が邪道なのか?
513名無し~3.EXE:2011/04/14(木) 07:32:39.98 ID:Z6uoFBV3
Remove-Item ジャスティス
514名無し~3.EXE:2011/04/14(木) 20:57:02.48 ID:lZTIT/AE
$Justice = $true
515名無し~3.EXE:2011/04/14(木) 23:21:15.62 ID:B40hZWNg
まさかここまでジャスティスがツボに嵌ってくれるとは思わなかった、今は満足している
516名無し~3.EXE:2011/04/15(金) 15:57:27.78 ID:KAM3iEmu
英語のレベルも知性のレベルもその程度w
517名無し~3.EXE:2011/04/16(土) 20:02:03.11 ID:nc8TFyvk
かゆいところに手が届くナイスなスクリプトが完成すると気持いいな。

このスクリプトを他人に渡したところで、パワーシェル設定してない
一般人には使えないって点で、魔法使いが独自の魔法を生み出すって
気分だな。童貞的な意味も含めて。
518名無し~3.EXE:2011/04/16(土) 20:26:17.25 ID:Lqgt7S59
PowerShell実行速度上がらねーの?
内部的にキャッシュでコンパイルしてくれれば、いいんだけど
519名無し~3.EXE:2011/04/16(土) 23:35:58.71 ID:LxzF9JpT
ngen使えば起動は早くなるけど、スクリプト自体は無理
520名無し~3.EXE:2011/04/29(金) 19:48:39.41 ID:gPwpChpQ
PowerShellで2chビューワ もっとイカスの作った
http://d.hatena.ne.jp/coma2n/20080222/1203633878

PowerShellって見たところC#とまったく同じに見えるんだけど
なんか違うの
521名無し~3.EXE:2011/04/29(金) 19:57:46.92 ID:vn1wTVvv
だってそれC#のコードだし
PowerShellから呼ぶdllのソースだよそれ
522名無し~3.EXE:2011/04/29(金) 19:58:36.81 ID:+IFTo0+I
>>520
念のため言っておくけど、その記事の最後に貼ってあるのは
C#で書かれたPowerShell用アドオンのソースコードだよ
523名無し~3.EXE:2011/04/29(金) 20:07:01.20 ID:+IFTo0+I
あらら被った
524名無し~3.EXE:2011/04/30(土) 20:11:41.34 ID:t1W8bozc
このスレは過疎ってるけどこの技術自体は将来性あると思うんだな
法人でWin2Kが退場してWin7がメインになる頃には
525名無し~3.EXE:2011/04/30(土) 20:58:49.54 ID:Wu/ATdIX
ウチは全社的にServer2008R2になった。
デフォでPowerShell入ってるのは良いんだが、誰も活用しようとしない。
526名無し~3.EXE:2011/04/30(土) 21:30:43.15 ID:QFFOCXb5
新しいやり方が出てきても、古いやり方が使えなくなったりしない限り、
それを使い続けようとする事なかれ主義者が多いからな。
古いやり方は早めにサポートを打ち切っていかないと。

PowerShellに限った話ではなくて、
IE6やIPv4から乗り換えようとしない奴とか、
1つ前のバージョンのWindowsの方が良かったと言い出す奴らとかも全部一緒。
527名無し~3.EXE:2011/05/05(木) 13:41:46.61 ID:u+4tfpgR
シェルの外見変えられないのかな。
形から入るタイプなのでオサレにしたいんだ。
528名無し~3.EXE:2011/05/05(木) 14:19:58.33 ID:S51kfrXh
ISEなら多少はマシかも
529名無し~3.EXE:2011/05/05(木) 14:28:49.15 ID:I1OWkoAs
CLIプログラムの外見って、FontFaceの話かな?ならコマンドプロンプト同様に、タイトルアイコン->プロパティで変えられる。
それ以外の話をしてるんだったらパス。
530名無し~3.EXE:2011/05/05(木) 14:59:45.03 ID:I1OWkoAs
あー、わかった。
ttp://sourceforge.net/projects/console/
こいうの使えば良いかもね。
531名無し~3.EXE:2011/05/05(木) 15:09:37.31 ID:u+4tfpgR
>>530
ありがとうございます。
透過使ったりできて、なかなか素敵です。
532名無し~3.EXE:2011/05/05(木) 22:07:09.88 ID:S51kfrXh
俺はこの AutoIt スクリプトをカスタマイズして使ってる。
cmd.exe poweshell,exe maruo.exe を対象にして
リモートデスクトップ併用時にも透けるようにしている。

ttp://komalo.deviantart.com/art/Glass-CMD-for-Vista-and-Seven-121457868
533名無し~3.EXE:2011/05/06(金) 00:15:13.65 ID:W8IHpA9I
534名無し~3.EXE:2011/05/06(金) 01:51:44.75 ID:V83PAHbf
ソースの中身を理解して自分でコンパイルすれば問題なしジャン
535名無し~3.EXE:2011/05/09(月) 02:36:36.26 ID:hVXG6nCG
WASP を使いたいのですが、どのように設定すれば Select-Window 等を利用できるようになるのでしょうか
536名無し~3.EXE:2011/05/09(月) 03:50:59.42 ID:trWoIERr
example 見ればいいんじゃない?
 ttp://wasp.codeplex.com/wikipage?title=Some%20Usage%20Examples

それともモジュール呼び出しでつまずいてるのかな?
 ttp://msdn.microsoft.com/library/dd878326

$home\Documents\WindowsPowerShell\Modules\WASP ディレクトリに WASP.dll を置いて
 > Import-Module WASP
とか。
537名無し~3.EXE:2011/05/09(月) 03:57:19.92 ID:trWoIERr
>>532
の面白いねー、ソースもあるので ps だけで実装できないかねえ。
AutoItは詳しく知らないのだけど、依存性の高いコードでもなさそうな気がした。
538名無し~3.EXE:2011/05/09(月) 07:25:59.49 ID:NIjroFM/
Win32API を呼べてフックもできればいい
PS では厳しいが .NET なら余裕だな
539535:2011/05/09(月) 12:11:20.74 ID:v5BEZYth
>>536
モジュール呼び出しでつまずいていました
ありがとうございます
540名無し~3.EXE:2011/05/15(日) 04:22:43.94 ID:YpedAiBN
なんとなくRubyのinjectメソッドを実装してみた
(参考) http://d.hatena.ne.jp/kenkitii/20090114/ruby_inject

function inject {
param ( $varname, $init, $sb )
begin { New-Variable $varname $init }
process { iex "`$$varname = & { $sb } " }
end { iex "`$$varname" }
}

sal %% inject

1..10 | %% sum 0 { $sum + $_ }
0..10 | %% fib (1,1) { $fib + ($fib[$_] + $fib[$_+1]) }
":A, :B, :A, :C, :E, :A, :D, :B, :B, :C, :E" -split ", " | %% h @{} { $h[$_] +=1; $h }

便利なよーな、そうでもないよーな
541名無し~3.EXE:2011/05/15(日) 09:28:42.54 ID:TJGLnG/t
Enubranle.Aggregate が PowerShell から簡単に使えればいいのにね
542名無し~3.EXE:2011/05/19(木) 01:10:25.61 ID:OI4oJ9e1
PowerShellってVistaHomePremiumでは使えないの?
Windows6.0-KB968930-x86だと「お使いのシステムには適用されません」って出るんだけど?
543名無し~3.EXE:2011/05/19(木) 01:16:05.84 ID:2A7Fsd+s
ServicePackは?
544名無し~3.EXE:2011/05/19(木) 15:19:03.87 ID:u6qJwN9x
vistaなら既にはいってないかい?
[全てのプログラム]->[アクセサリ]->[Windows PowerShell]
545名無し~3.EXE:2011/05/19(木) 17:39:32.25 ID:pRyhwczH
asa
546名無し~3.EXE:2011/05/19(木) 20:06:21.63 ID:2A7Fsd+s
>>544
デフォで入る様になったのは、Win7からだぜ。
547名無し~3.EXE:2011/05/19(木) 20:51:19.84 ID:9yE+dDrX
XP SP2以降でインスコできる
ただし.NET Framework 2.0が必要
548542:2011/05/19(木) 22:53:10.90 ID:OI4oJ9e1
環境はVistaHomePremium ServicePak2

いまプログラム見たらNetFramework2.0だけ入ってなかったけど
これが原因か?
NetFrameworkって下位互換じゃなかったっけ?
549名無し~3.EXE:2011/05/19(木) 23:54:27.18 ID:9yE+dDrX
1.0、1.1、4は独立
3.5は3.0と2.0を含む
550542:2011/05/20(金) 00:12:43.81 ID:rXFR5CyP
PS1.0がインストールされてました。
全てのプログラムにもインストール済の更新プログラムにも表示されず、
レジストリも本体も削除できないぜ。

削除する方法ありません?
551名無し~3.EXE:2011/05/20(金) 16:56:06.89 ID:yNlageFY
552名無し~3.EXE:2011/05/21(土) 17:20:04.36 ID:3tleRyDP
コマンドプロンプトでの

~>python test.py < data.txt

ってPowerShellではどうやるんですか?

PS > python test.py < data.txt
演算子 '<' は、今後の使用のために予約されています。
発生場所 行:1 文字:17
+ python test.py < <<<< data.txt
+ CategoryInfo : ParserError: (<:OperatorToken) []、ParentConta
insErrorRecordException
+ FullyQualifiedErrorId : RedirectionNotSupported
553名無し~3.EXE:2011/05/21(土) 20:49:33.71 ID:LlfCj+8+
標準入力のリダイレクトはサポートされていない
cat data.txt | python test.py で動くかも
554名無し~3.EXE:2011/05/21(土) 20:51:38.05 ID:3tleRyDP
>>553
そうなんですか…とりあえずその方法で動きました。ありがとうございます
555名無し~3.EXE:2011/05/22(日) 03:47:13.30 ID:+8RE0a7w
とりあえず?
556名無し~3.EXE:2011/05/22(日) 04:18:06.08 ID:tbIjUUQC
せっかくエイリアスでunix系っぽく使えるから
他のやり方も同じだと楽なのになあと思って
557名無し~3.EXE:2011/05/22(日) 08:50:48.01 ID:NOWxJTwg
バイナリーデータをパイプ使って渡したいときは、
pipebuf.exe を試してみる。
558542:2011/05/22(日) 21:46:15.78 ID:D1aZiR20
2.0インストールできました。

原因はWindowsUpdateで2.0がインストールされていたのに気付かず
1.0をアンインストールしていたためでした。
WindowsUpdateで2.0をインストールしようとして失敗し気付きました。
お騒がせいたしまして申し訳ありません。

C#でプログラミング経験はありますが、PowerShellはこれが初めてです。
お騒がせ次いでと言っては何ですが、これからPowerShellを始めるにあたり
おすすめの参考書などがあれば教えてください。
559名無し~3.EXE:2011/06/06(月) 00:53:12.61 ID:TbEK8f6D
Import-Csvしたときに、
そのカラム名を順序通り取得したいのですが、どうすれば良いのでしょう?
いったん Get-Content | Select-Object -First 1 して、カンマ分割すれば
取り出せないこと無いのですが、エレガントじゃないし...。
560名無し~3.EXE:2011/06/06(月) 01:35:25.69 ID:peuLBeCM
ヘッダーをスクリプト側に持たせとけばいいんじゃね
561名無し~3.EXE:2011/06/06(月) 05:15:43.90 ID:TbEK8f6D
諸々のcsvからINSERT文、またはMERGE文を作成するプログラムなので、
ヘッダをスクリプト内に持たせるわけにはいかないのです。
562名無し~3.EXE:2011/06/06(月) 22:36:34.43 ID:peuLBeCM
$a = Import-Csv data.csv
$a.PSObject.Properties
みたいな感じかねぇ
563名無し~3.EXE:2011/06/09(木) 22:45:18.68 ID:GeU6z7GL
あ、>>562は正確には
$a | % { $_.PSObject.Properties }
とかしないとだめだった
564名無し~3.EXE:2011/06/10(金) 09:46:31.90 ID:dnxsTn+8
全角のシングルクォーテーションを変数に代入したいのですが、
$X = '’'
とするとエラーになります(parseエラー)。ダブルクォテーションで囲んで
$X = "’"
だとうまくいくようなのですが、なんで半角シングルクォーテーションで囲むとエラーになるのでしょうか?
565名無し~3.EXE:2011/06/10(金) 11:22:41.84 ID:dnxsTn+8
それから、
全角のダブルクォーテーションにも同じようなことがあって
"”"
のように半角ダブルクォーテーションで囲むとparseエラーになってしまいます。
なんでか理解できないのですが、
"`”"
↑のように`でエスケープすると正常に動くんです。例えば
$x -replace "`”", "`""
ダブルクォートの全角→半角変換のような場合に随分悩んだんですが、
なんでこれで動くのか理解できません
566名無し~3.EXE:2011/06/10(金) 11:57:59.32 ID:YD1awf6i
Powershellでは全角のクォーテーションも文字列リテラルを表す記号だから

$x=”test”
$x
とかやってみ?
567名無し~3.EXE:2011/06/10(金) 15:06:58.73 ID:dnxsTn+8
ありがとうございました。
全角が予約語(?)・・・あちゃー!ちょっとびっくりです。

568 忍法帖【Lv=7,xxxP】 :2011/06/10(金) 20:06:45.07 ID:XCI56QaG
あんまり使わない
569名無し~3.EXE:2011/06/12(日) 00:31:23.77 ID:QnGtFcoz
なんとなしにNew-Itemのヘルプ読んでたら、-Pathってワイルドカード使えることに気付いた

mkdir (1..3)
1..3 | % { mkdir -path ? -name $_}
1..3 | % { mkdir -path ?\? -name $_}
1..3 | % { mkdir -path ?\?\? -name $_}

なにこれこわい・・・
570名無し~3.EXE:2011/06/12(日) 13:27:32.68 ID:nOef+fQv
>>568
あんまり使わないし、思ってもないからはまるんだろ
571名無し~3.EXE:2011/06/14(火) 15:24:39.19 ID:hlsr0Yqw
ドラッグ&ドロップで処理しようと思って下のサイト見ながらレジストリいじったんですが、、、

http://blogs.wankuma.com/mutaguchi/archive/2006/06/23/31196.aspx

半角でスプリットされた配列を半角スペースで連結して、最後に余計な半角を除去して
$oldpath2 = ''
foreach($x in $oldpath){
$oldpath2 += $x + ' ';
}
$oldpath2 = $oldpath2 -replace " $"

このoldpath2をtest-pathしてもFailになってしまう。で調べていくうちファイル名に"[]"が使われると失敗することがわかりました。

結局、
$oldpath2 = $oldpath2 -replace "\[", "``["
$oldpath2 = $oldpath2 -replace "\]", "``]"

を入れてやるとうまく動作するんですが、\とか`とか使うのはparseのときだけじゃなく、
OSから渡されたファイルパスの文字列であっても、[]に対しては`[, `]としないといけないんでしょーか?
572名無し~3.EXE:2011/06/14(火) 15:28:29.65 ID:hlsr0Yqw

ちなみに上のサイトのレジストリ
@="\"C:\\Program Files\\Windows PowerShell\\v1.0\\powershell.exe\" -NoLogo \"%1\" %*"
は最後ミスってるようです。

%x\"

で正常に動くようになりました。
あと、そのサイトのPSスクリプトはスプリットされた文字列を半角スペースでつなぐか、何もせず終了するかで
test-pathを使ってますので、[]を含むパスの場合、常に最後に余計な半角スペースを追加してしまうはずです。
573名無し~3.EXE:2011/06/14(火) 16:48:42.77 ID:hlsr0Yqw
誤 %x\"
正 %*\"

でした
574名無し~3.EXE:2011/06/14(火) 17:42:34.03 ID:OYVTOG5z
-literalPath パス名 ではダメ?
575名無し~3.EXE:2011/06/14(火) 17:52:25.07 ID:hlsr0Yqw
test-pathというのは比較的明確だと思ったので書きましたが他のコマンド(ren-itemとか)でも軒並み駄目です。
ただ、renなんかだと第2引数のdestinationは`[,`]に変換しなくともOKです。変換すると`[ `] の入ったファイルができてしまいます。
あと、[]に関してはまだ引数としてPowerShellに手渡せてるのですが、パスに()が入ると、$argsにすら展開されてないようで、
コマンドラインの処理に移る前に落ちてしまいます。
576名無し~3.EXE:2011/06/14(火) 17:56:30.68 ID:hlsr0Yqw
ちょっと紛らわしいので、、、
例えばファイル名[aaa]を[bbb]に変換したい場合

ren-item `[aaa`] [bbb]

で正しく変換できるってことです。

ren-item `[aaa`] `[bbb`]

とすると、`[bbb`]というファイルができあがってしまうんです
577名無し~3.EXE:2011/06/14(火) 19:00:02.80 ID:hlsr0Yqw
>パスに()が入ると、$argsにすら展開されてないようで、
>コマンドラインの処理に移る前に落ちてしまいます。

親ディレクトリを abc(Memories)
ファイル名 xyz.jpg
をドロップしたときのエラーです。尚、レジストリは
@="\"C:\\Program Files\\Windows PowerShell\\v1.0\\powershell.exe\" -NoExit -NoLogo \"%1\" %*"\
として、終了しないようにしています。

用語 'Memories' は、コマンドレット、関数、スクリプト ファイル、または操作可能な
プログラムの名前として認識されません。名前が正しく記述されていることを確認し、
パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください

発生場所 行:1 文字:80
+ E:\Users\nanashi3.exe\Documents\WindowsPowerShell\test.ps1 J:\Pics\abc(Memori
es <<<< )\xyz.jpg
+ CategoryInfo : ObjectNotFound: (Memories:String) []、CommandNotF
oundException
+ FullyQualifiedErrorId : CommandNotFoundException
578名無し~3.EXE:2011/06/15(水) 10:45:39.62 ID:uqXZtV/z
ID:hlsr0Yqwです。
自己レスです。
>>575>>577に書いた()や”がパス名にあるとD&Dでうまくパスが渡せない件は
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoLogo -file "%1" "%*"

とすることで解決しました -file が必要だったようです。
579名無し~3.EXE:2011/06/15(水) 12:00:53.32 ID:uqXZtV/z
>>574
レスありがとうございます
確かに-LiteralPathを指定すると正しく認識してくれました。
ren-itemにはこのスイッチがないんですね。仕方がないので同じスイッチのあるmove-itemを使うことにしました。
レジストリのpowershell.exe 起動の-file追加と、test-path, move-item に-LiteralPath追加で解決しました。
ren-itemは・・・
580名無し~3.EXE:2011/06/16(木) 10:03:37.06 ID:zMvT4xBE
581名無し~3.EXE:2011/06/18(土) 12:21:48.98 ID:LQSnawBo
いや別に>>,578に書いてるので間違いない。
別に引き渡しファイル名をダブルクォートで囲んでも問題ないし,
=の右辺すべてをダブルクォートで囲む必要もない
582名無し~3.EXE:2011/06/18(土) 12:58:42.75 ID:LQSnawBo
誤>=の右辺すべてをダブルクォートで囲む必要もない

regファイルのときはすべてダブルクォートで囲まなきゃだめだな。
583名無し~3.EXE:2011/06/18(土) 13:00:46.01 ID:LQSnawBo
どっちにしてもこのやり方だと複数ファイルのD&Dはできないんじゃないかな?
複数ファイルのD&Dのやり方知ってる人いる?
584名無し~3.EXE:2011/06/18(土) 22:48:45.31 ID:e1XL8Lwx
>>9-14辺りで試した頃の記憶が正しければ普通に出来たはずー
585名無し~3.EXE:2011/06/19(日) 00:07:40.23 ID:hkRbAuVf
だから>>580だろがぼけ
586名無し~3.EXE:2011/06/20(月) 21:34:49.69 ID:v/7Liv8e
角括弧が含まれてるフォルダ上で
rm *.txt
とかやってもファイルは消えないしエラーも出ないけど回避方法ありますか。
587名無し~3.EXE:2011/06/21(火) 16:12:31.68 ID:VjDaDgfH
>>585
"%*"で問題ないつっとるだろうがこのカタワ野郎
588名無し~3.EXE:2011/06/21(火) 18:34:05.82 ID:YkazeZQ8
複数ファイルをドロップして困るだろぼけ
589名無し~3.EXE:2011/06/22(水) 10:25:50.30 ID:NT5SAk/2
ダブルクォートがなければ複数ファイルのDD処理のパス引き渡しと、繰り返し起動がオートでできるとでも思ってんのか。
ダブルクォートの有無に関わらず複数ファイルは全て$argsに引き渡される。
そのパスの分離等はユーザ側で記述する必要がある。
590名無し~3.EXE:2011/06/22(水) 13:22:51.21 ID:ChVrEqGR
$args.lengthが違うだろぼけ
591名無し~3.EXE:2011/06/23(木) 01:56:21.16 ID:gT9D7z4L
>>590
いつまでアホ晒してんだお前。ええ加減死ねや。邪魔なんだようじ虫が
592名無し~3.EXE:2011/06/23(木) 20:42:26.90 ID:AAFlkpQL
なに吠えてんのかね あほ犬ほど吠えるつうからな
593名無し~3.EXE:2011/06/23(木) 22:48:12.36 ID:KbFVjKDS
PowerShell便利だよな、でもDOS窓とWSH廃止してくれないとズルズル移行できない
594名無し~3.EXE:2011/06/23(木) 23:14:18.69 ID:ZRZeOpf6
どんなことに使ってるの?
595名無し~3.EXE:2011/06/24(金) 22:43:25.93 ID:PtzrsCr4
バッチやWSHでできないことに
596名無し~3.EXE:2011/06/25(土) 00:42:42.18 ID:wL5D0FXE
たとえば?
597595:2011/06/25(土) 18:48:57.09 ID:6QoB7Yy1
文字色を緑にしてマトリックスごっこ
598名無し~3.EXE:2011/06/25(土) 19:48:50.00 ID:qvUBt0SB
そんなことに使ってるだけなの?
599名無し~3.EXE:2011/06/25(土) 20:12:09.06 ID:c3IGWjkT
全員そうだよ
600名無し~3.EXE:2011/06/26(日) 01:45:28.03 ID:mrbob1B4
全員ばかなんだ
601名無し~3.EXE:2011/07/01(金) 12:55:10.31 ID:1d/pECau
> new-item "`[abcd`].txt" -type file

とやると、カレントディレクトリに [abcd].txt が作成されるのに

dir > "`[abcd`].txt"

だと [abcd].txtがファイルに認識されず。エラー吐いて死ぬのは何故?
リダイレクトで[]の含まれるファイルをワイルドカード抑制するのはどーすればいいの?
602名無し~3.EXE:2011/07/02(土) 01:08:54.41 ID:JqD/cKNx
わからん。out-file に -literalpath がないのが困る
とりあえず以下で代用?
dir | out-string | set-content -literalpath [abcd].txt -encoding unicode
603名無し~3.EXE:2011/07/02(土) 01:14:36.64 ID:Vv7Laafb
man ni
> -Name <string>
> Accept wildcard characters? false

ni [abcd].txt -type file
> [abcd].txt

gi '.\`[abcd`].txt'
> [abcd].txt

dir > '.\`[abcd`].txt'
dir > '.\``[abcd``].txt'
dir > '.\[[]abcd].txt'
dir > ".\````[abcd````].txt"
dir > ".\[[]abcd].txt"
604名無し~3.EXE:2011/07/02(土) 01:16:37.01 ID:Vv7Laafb
--------------------------------------------------------------------

rm '.\`[abcd`].txt'

dir > '.\`[abcd`].txt'; ls
> `[abcd`].txt

dir > '.\``[abcd``].txt'
> wildcard path .\``[abcd``].txt did not resolve to a file.

dir > '.\[[]abcd].txt'
> wildcard path .\[[]abcd].txt did not resolve to a file.

dir > ".\````[abcd````].txt"
> wildcard path .\``[abcd``].txt did ...

dir > ".\[[]abcd].txt"
> ... did not ...

.. orz
605名無し~3.EXE:2011/07/02(土) 02:43:53.54 ID:gR6zIl/Z
一応8.3形式で指定すればなんとかならないことはないけど、根本的な解決にはなっとらんね

# ls > [].txt<Ctrl>[<Tab>
function TabExpansion ($line, $lastWord) {
if ( [char]$lastWord[-1] -eq 27 ) {
$path = ($line -split '>\s*' )[-1].TrimEnd(27)
}
$path = (Resolve-Path -LiteralPath $path).Path
(New-Object -ComObject Scripting.FileSystemObject).GetFile($path).ShortPath
}
606名無し~3.EXE:2011/07/02(土) 02:58:54.63 ID:gR6zIl/Z
ようわからんけど [abcd].txt がある時に ls > '``[abcd``].txt' とか ls > "````[abcd````].txt"は成功するっぽい
ない時はエラーになる
607名無し~3.EXE:2011/07/02(土) 05:00:16.52 ID:GmKdEaKR
デフォでワイルドカード展開は考えもんだな。
コマンドオプションで対応するのかと思ってたら、-LiteralPathがないコマンドもあるし。
[]の取り扱いは正直困ってる。なんとかしてくれ

ぱっと見、いい仕様だなーと思うんだけど、やってみるとなかなか思い通りに動いてくれないんだな
awkやPerlの書式そのまま輸入してもいいのにってものが、独自の書式だったり。
ゲイツもいなくなったんだし、そろそろunix文化を素直に認めてくれよ。
エスケープ文字とかなんでわざわざ`にしちゃうのよ。正規表現使うときは相変わらず\だし。混乱するんだな。
chop;とかどー書くの? これも正規表現で置換削除?

メイン環境をFreeBSDからwin7にしたので、なんとしても習熟しないと・・・焦
608名無し~3.EXE:2011/07/02(土) 07:54:47.25 ID:eEgnllPI
どっちかというと、UNIXの標準環境で
Get-ChildItem '/Program Files/' とかできるようにして欲しいところだ。
609名無し~3.EXE:2011/07/02(土) 10:00:40.86 ID:bVBHw7Hy
>>601

1)そもそもリダイレクトの「>」は使わない。
2)『ワイルドカード抑制』はファイル名をいったん変数に代入してから使う。
610名無し~3.EXE:2011/07/02(土) 10:27:38.50 ID:bVBHw7Hy
>>609
おっと、2)は局所的でしたな。
611名無し~3.EXE:2011/07/02(土) 10:45:22.20 ID:upaPXTz8
>>609
>1)そもそもリダイレクトの「>」は使わない。
ハァ?寝ぼけてんのか?

>2)『ワイルドカード抑制』はファイル名をいったん変数に代入してから使う。
で、リダイレクト時のファイル名のリテラル指定は?
代入してもワイルドカード抑制などと全く関係ないわけだが、
仮にそれで解決したとして出来るだけ少ないキー操作で、
処理実行したいシェルスクリプト操作でいちいち変数に代入しなきゃならないような設計思想そのものが大間違いだ。
612名無し~3.EXE:2011/07/02(土) 11:00:54.54 ID:p9zhBgGb
>>607
PowerShellインアクションって本を読むべし
613名無し~3.EXE:2011/07/02(土) 11:11:07.10 ID:bVBHw7Hy
>>611

ls | sc -l '[abcd].txt'

でいーじゃん。
614名無し~3.EXE:2011/07/02(土) 11:41:23.02 ID:JqD/cKNx
「ls > abcd.txt」だとコンソールに出る表示がテキストファイルに出る(最後の空行はなし)が
「ls | sc -l '[abcd].txt'」だとファイル名だけになっちゃうよ
「ls | out-string | sc -l '[abcd].txt'」だとコンソールの表示になるが文字コードが違う(&最後の空行が3行)
「ls | out-string | sc -l '[abcd].txt' -encoding unicode」にすると文字コードも合うけど最後の空行が3行
「ls | out-file abcd.txt」はリダイレクトと同じかと思いきや最後の空行が2行

これってうちの環境だけ?
615名無し~3.EXE:2011/07/02(土) 11:57:44.18 ID:bVBHw7Hy
>>614

PowerShellのパイプってオブジェクトパイプだから、
そういうものさね。

でもGet-ChildItemの結果をテキストで受け取りたい、ってニーズはよく分からない。
オブジェクトのままの方が融通利いてよくね?
616名無し~3.EXE:2011/07/02(土) 14:55:33.41 ID:Q6LPVxC+
PSでしか通用しないオブジェクトをそのまま他の環境に持って行って都合がいいって?
617名無し~3.EXE:2011/07/02(土) 15:03:42.31 ID:Y149FiP1
いろいろ試してて気になっただけだから別にそうしたいわけじゃないけど
記録を残す意味でログに出したいとかはあるんじゃないかな?
export-clixml とかで XML にしたほうが戻せるしいいかもしれないけど、そこまでする必要はないことも多いだろうし
(export-clixml も -literalpath がないから [] の問題が解決しないが)
618名無し~3.EXE:2011/07/02(土) 16:18:26.58 ID:JqN8s/Hn
>>615
コマンドの出力やエラーをリダイレクトでファイルに落とすなんてのは、
人類が2本足歩行する前から行われていた自然な流儀だ。
>>601 のレス内容はあくまでもリダイレクトファイルのワイルドカードの話であってdirは一例にすぎんだろ。Get-ChildItemのオブジェクト出力云々ってお前の読解力はガキ以下だな。
> ファイル名
で済むところを、>>602が言うように、
| out-string | set-content -literalpath ファイル名 -encoding unicode
とタイプしないといけないのはユーザからすると迷惑千万な話だろ。
コマンドラインアプリを作成する際にも、ファイルオープン云々の余計な手続きを省略して手っ取り早く記録したいからリダイレクトを使うのに無駄にタイプ数増やしてどーするよ。
619名無し~3.EXE:2011/07/02(土) 16:25:08.31 ID:Q6LPVxC+
いい方法思いついたぜ

cmd /c "dir >[abcd].txt"

620名無し~3.EXE:2011/07/02(土) 16:43:57.42 ID:WCMGGwdq
>>619
スマート過ぎてワロタ
621名無し~3.EXE:2011/07/02(土) 16:53:31.79 ID:Q6LPVxC+
虚しすぎる。
622名無し~3.EXE:2011/07/02(土) 17:02:31.05 ID:Vv7Laafb
>>603
間違えてた
 x man ni
 o man -ful ni
でした。 横道だけど、
 > -Path <string[]>
 > Specifies the path to the location of the new item. Wildcards are permitted.
 > Accept wildcard characters? false
Wildcards are permitted なのに、false ?

PS D:\Temp> mkdir emptydir ; cd emptydir ; mkdir a,b ; ni -name [xy].txt -path [ab] -type file ; echo `n$?

Directory: D:\Temp
d---- 07/02/2011 16:48 emptydir

Directory: D:\Temp\emptydir
d---- 07/02/2011 16:48 a
d---- 07/02/2011 16:48 b

Directory: D:\Temp\emptydir\a
-a--- 07/02/2011 16:48 0 [xy].txt

Directory: D:\Temp\emptydir\b
-a--- 07/02/2011 16:48 0 [xy].txt

True
623名無し~3.EXE:2011/07/02(土) 17:03:32.09 ID:Vv7Laafb
--------------------------------------------------------------------

PS D:\Temp\emptydir> ni -name [xy].txt -path nonexistdir -type file ; echo `n$?
New-Item : Could not find a part of the path 'D:\Temp\emptydir\nonexistdir\[xy].txt'.

False

--------------------------------------------------------------------

PS D:\Temp\emptydir> ni -name [xy].txt -path [ab]nonexistdir -type file ; echo `n$?

True

!? !? .. orz
624名無し~3.EXE:2011/07/02(土) 22:41:15.26 ID:vMjnZy37
>>623
一つ目は存在しないフォルダにファイルを作成しようとしてエラーが出てるだけ
ルークばりに-force使え

二つ目は何もないフォルダで ls * ってやってもエラーにならないのと同じ
-Nameと-Pathを同時に使う場合-Pathはワイルドカードを展開する
適合するパスがあればちゃんとそこに[xy].txtを作成してくれる
625名無し~3.EXE:2011/07/02(土) 23:54:11.76 ID:bVBHw7Hy
>>618

Get-ChildItem の出力をファイルに落としたい、と言うことならば、
Get-ChildItem | Export-Csv hoge.csv
した方が、正確に落とせるよ。
Import-Csvすれば再現できるし。オブジェクトとして利用もできる。

もっとも-LiteralPathないけどね。
確かに-LiteralPathオプション無いのは不便だよね。
626名無し~3.EXE:2011/07/03(日) 00:06:59.43 ID:M8WDBpI5
パイプラインを流れるのがオブジェクトであって困るのは、バイナリデータを受け渡したいときくらいだ。

大丈夫、すぐに慣れるさ。その気があれば。
627名無し~3.EXE:2011/07/03(日) 00:11:08.68 ID:1UjkYHk0
>>624
どもです。
やっぱり、ワイルドカード評価してるよね。
「ワイルドカードの使用を認めよう。だが断る」
と書かれてるようで気になってしまった。

> ルークばりに-force使え
普段はksh使ってるので、さながらアナキンばりに暗黒面に溺れてみます。
628名無し~3.EXE:2011/07/03(日) 00:28:56.66 ID:kCBSGmQo
>>627
-path にファイル名まで指定する時(-Nameを使わない時)はワイルドカードは評価されない
ヘルプは-Nameを使うか使わないかで挙動が変わることを説明してないから、非常に分かりにくいけど
629名無し~3.EXE:2011/07/03(日) 10:48:11.57 ID:ycF5FhUZ
>>625
テメエは何度言っても文章理解できないのか。
Get-ChildItem の出力が問題なんじゃなくて、
一般のコマンド出力、エラーのてっとりばややい記録方法であるリダイレクト出力が
簡単にできないことが問題だといっとるだろうがこの文盲が。
630名無し~3.EXE:2011/07/03(日) 11:54:52.29 ID:M8WDBpI5
>>629

だから、
一般のコマンド出力の結果は、オブジェクトなので、Export-CSVとかしないと、正確に記録できませんよ。
と言うことを言っています。
画面上に出てくる情報はコマンド出力の一形態でしかないです。
ログならば、より生に近い形で記録するか、あるいは手間かけて必要最小限の情報を整形して記録しないと、
帯に短し、たすきに長しの中途半端な情報になってしまうと思います。
※でもExport-Csvでもすべての情報が残るわけじゃないけど。

特にGet-ChildItemの場合、パイプで別コマンドに渡したときと、渡さず画面出力したときでは結果が明確に異なります。

さて、以上なのですが、
やりたい事は、コマンドの出力を残すと言うよりも script コマンド的な機能を必要としているって事ですよね。

> 一般のコマンド出力、エラーのてっとりばややい記録方法であるリダイレクト出力が
> 簡単にできないことが問題だといっとるだろうがこの文盲が。

見えたままそのままがパイプラインを流れるわけではないので。
トレードオフとして、ある程度は割り切るしかない、と思っています。
631名無し~3.EXE:2011/07/03(日) 12:25:46.36 ID:ycF5FhUZ
お前、他の言語使ったことないのかい。
PowerShllはシェルでもあるわけだ。
他言語出作った.exeはエラーログ、出力をオグジェクトなんか出力しない
printfでテキストを出力すんだよ。
シェルはアプリと人の目との間に介在する立場でもある
そーいうことを考えてないのかお前は。
632名無し~3.EXE:2011/07/03(日) 13:19:25.62 ID:M8WDBpI5
>>631

> 他言語出作った.exeはエラーログ、出力をオグジェクトなんか出力しない

そうですよ。
でもそれってPowerShellがオブジェクトをパイプに渡していけない理由になってないかと。
オブジェクトをパイプに渡すのはPowerShellの大きな特徴のひとつでしょう。
パイプでつないでプログラミングするのはUNIX由来と思いますが、
無編集(無加工)のバイナリーデータを渡すだけだったのが、
一歩踏み込んでオブジェクトを渡すことにしたのはひとつの英断でしょう。
失われるものもあるわけですが、メリットの方が多いんでないかい?
できないことを嘆くよりも、できる事を活用したほうが効率的なのでは、と考えるわけです。

> シェルはアプリと人の目との間に介在する立場でもある

ゆえに
Get-ChildItem が画面に出力する内容はオブジェクトそのままではなく、見やすいように編集されているのでは?

> お前、他の言語使ったことないのかい。

スクリプト系で言うと、Perlとかbourne shellなら多少。
最大でも数k程度ですが。
633名無し~3.EXE:2011/07/03(日) 13:42:14.92 ID:ycF5FhUZ

>スクリプト系で言うと、Perlとかbourne shellなら多少。

すっこんでろ
634名無し~3.EXE:2011/07/03(日) 14:55:09.81 ID:kCBSGmQo
[ を含むファイルが既に存在する時は、エスケープで対応できるようだ
単純に新規ファイルにリダイレクトする時に [ を使わないようにすればいいんでなかろうか

完全性を求めるなら別だけど、そんな気にならんし
ぶっちゃけ>>601で話題になるまで5年間、誰も義憤に駆られてなかったろ
いや、>>601本人は[]付きの新規ファイルにリダイレクトする必要性があるのかもしれんが
635名無し~3.EXE:2011/07/03(日) 18:05:43.70 ID:1UjkYHk0
厄介なのは、シングルクォートで括ってもリテラルにならないこと。
さらにバックティックでエスケープしてるかと思いきや、
dir > '`[nonexist`].txt'
> `[nonexist`].txt
なので、も少し把握しやすい振る舞いをして欲しい気はしますね。
てことで次期バージョンに期待。
636名無し~3.EXE:2011/07/03(日) 19:29:37.14 ID:4myokhPm
一時ファイルにリダイレクトしておいて Rename-Item で変えるとかの小技はできそうだが…
まぁ PowerShell は専用環境と割り切って、>>631 のような用途では真面目に >>619 がベストな気がする
そもそもリダイレクトの文字コードが UTF-16 なのは他プログラムからすると扱いやすいとはいえないし

>>630 正確に記録するなら Export-Clixml のほうがいいのでは。あえて Export-CSV を選ぶ理由はなくない?
637名無し~3.EXE:2011/07/03(日) 19:40:50.63 ID:M8WDBpI5
>>635

たぶん問題は、受け側のOut-Fileの-FilePathオプションが、
-LiteralPath ではなく、-Path オプション相当であること、ですかね。
出力先ファイルをワイルドカード展開、って狙いが分からない。
638名無し~3.EXE:2011/07/03(日) 19:45:01.09 ID:M8WDBpI5
>>636

はい、Export-Clixml の方が正確です。手馴れていたもので...。
で、
Import-Clixmlするとdirしたときをほぼ正確に再現できるのね。これは素晴らしい。
639名無し~3.EXE:2011/07/11(月) 14:46:20.58 ID:hkxcbTTW
やっぱ開いてから実行されるまでが遅いな
640名無し~3.EXE:2011/07/18(月) 01:34:18.14 ID:9txPewaU
>>563

ありがとう。
おかげさまで、メンバーの定義順どおり読めました。
って亀レス失礼。
641名無し~3.EXE:2011/07/20(水) 00:36:46.18 ID:QBefQt2k
まぁゴールデンのドラマで主役張るってのは女優としての資質・ビジュアル
どっちも求められるからなぁ
クラスで10番目の子を〜云々言ってるようならなかなか難しいだろうね
642名無し~3.EXE:2011/07/20(水) 00:37:43.66 ID:QBefQt2k
>>641
誤爆です…すみません
643名無し~3.EXE:2011/07/22(金) 23:55:35.76 ID:nXyFWcOi
2.0に対応した日本語の書籍って今のところなさそうなんだけど
予定すらないのかな
644名無し~3.EXE:2011/07/23(土) 22:33:39.52 ID:NKdNMIFL
インアクションにしろクックブックにしろ原書はは2.0に対応してるんだけど
大幅にページが増えてなかなか手を出しにくいしろものになってる
むしろその前の版でコアになる知識を理解する方が効率が良い気がする
645名無し~3.EXE:2011/07/24(日) 15:12:57.38 ID:57AP5o79
C#とかはVIsual Studioにwordで500頁を超える言語仕様書がついてたけど、
PowerShellにはこーいうのないのか
646名無し~3.EXE:2011/07/25(月) 01:56:51.39 ID:VY1FnbEu
>>645
たしかdocxであったよ
647名無し~3.EXE:2011/07/28(木) 10:33:30.90 ID:bkQEIczH
嘘だろ?
Visual Basicのスペックならついてるけど
648 忍法帖【Lv=6,xxxP】 :2011/07/28(木) 20:59:57.26 ID:F76A9yIr
いやVisual Studioについてるかの話じゃないぞ?
649名無し~3.EXE:2011/08/01(月) 00:17:39.90 ID:5w7iuQTb
http://www.microsoft.com/download/en/details.aspx?id=9706
ごめん まぎらわしかった
ダウンロード出来る
英語だけどね
650名無し~3.EXE:2011/08/03(水) 09:52:27.77 ID:/+JaSJQ7
おお!
解説本じゃなくて正規の言語仕様書が欲しかったんだわ。
THX 感謝します
C#はいち早く日本語翻訳されてるのにPSは後回しなんだな
651名無し~3.EXE:2011/08/11(木) 16:58:42.77 ID:yCeLyuoN
たすけてくだしあ
画像の整理してて、そういえばpowershellってのがあったから
使ってみようと思い立ったのですがこのザマです

あるディレクトリ(含サブディレクトリ)にjpgがあります
それらjpgを全部ひっくるめて別のディレクトリにコピーしようとしています
すると問題になるのが、ファイル名が重複している複数のファイルをどうするかということです
copy-itemではコピー先に同じファイル名があったときどちらか一方しか残しませんよね?

そこで事前にget-childitemで重複ファイルを探してリネームしようとしたのですがうまくいきません

$imgList=Get-ChildItem 'somewhere' -Recurse -Include *.jpg
for([int]$i=0; $i -lt $imgList.Length; $i++){
 [int]$pos = $imgList.Length-1
 if($imgList[($i+1)..$pos] -contains $imgList[$i]){ //当該ファイルと同じファイル名があれば
  Rename-Item $imgList[$i] -NewName "rn"+$imgList[$i].Name //←ここらへん曖昧(ファイル名の頭にrnとか付けたい)
 }
}

あと一歩な感じだと自分では思ってるのですが、どうすればいいでしょうか?
また、「こんな事しなくても目的は果たせるよ!」てなことならそちらの方法を教えて下さい
手近にPSがあったから使ってみようって感じなので,別にPSでなくても構いません(スレチになってしまいますが・・)

お願いします
652名無し~3.EXE:2011/08/11(木) 22:32:56.82 ID:JXgs3oCl
ファイル1個分のコピーだけど、こんな感じかな。
rnをつけてもなお重複したときのために連番をつけてみた。

$file = Get-Item "U:\Work\Source\TestImage.jpg"
$targetFolder = "U:\Work\Dest"

$index=0
$filename=$file.Name
do
{
$target = $targetFolder+"\"+$filename
$filename = "rn{0:d3}_{1}" -f $index,$file.Name
$index++
} while(Test-Path $target)

Copy-Item $file.Fullname $target
653名無し~3.EXE:2011/08/12(金) 03:57:40.01 ID:6rQ1eWJA
やるとしたら Group-Object でまとめちゃうかな

$dest = "C:\hoge"
ls -Recurse | group name |
% { $_.group[0] | % { copy $_.fullname -destination $dest }
$_.group[1..($_.group.Count-1)] |
% {$i=0} { copy $_.fullname -destination ('{0}\{1}_{2:D3}{3}' -f $dest, $_.BaseName, $i++, $_.Extension ) }
}
654名無し~3.EXE:2011/08/24(水) 06:52:39.35 ID:P+KmbyXV
Perlなんかのchop;はどー書いたらいいすか?正規表現で検索して削除?
655名無し~3.EXE:2011/08/24(水) 09:02:58.77 ID:e5UsptRI
>>654
それか.NET FrameworkのString.TrimEndで削除
656名無し~3.EXE:2011/08/24(水) 18:24:33.41 ID:STSwycRN
PowerShellどころかプログラミング自体まったくの初心者が
勉強するのにおすすめの本とかサイトがあったら教えてください。
657名無し~3.EXE:2011/08/24(水) 19:10:59.35 ID:7IGw0M81
658名無し~3.EXE:2011/08/25(木) 11:12:27.01 ID:nPMUJa0l
>>655
THX
ここやさしい人多いな。
こんなのでも応えてくれてありがと
659名無し~3.EXE:2011/08/25(木) 11:17:10.22 ID:rX/iHk5F
660名無し~3.EXE:2011/08/25(木) 11:56:48.00 ID:H6px43St
661名無し~3.EXE:2011/08/29(月) 02:34:23.74 ID:Vbv5WQuT
コンソールウィンドウを開かずに、スクリプトを自動実行するにはどうしたらいい?
662名無し~3.EXE:2011/08/29(月) 08:15:11.74 ID:ueJu1cMS
>>661
powershell.exe -WindowStyle Hidden
663名無し~3.EXE:2011/08/29(月) 13:45:45.71 ID:fgGRn+9R
それは一瞬開くだろ
664名無し~3.EXE:2011/08/29(月) 15:17:55.18 ID:JIjbFehp
Vista/2008以降ならタスクスケジューラで「ログオンしてない時でも実行」の
オプションつけておけば窓開かないよ

XP/2003ならWSHのWshShell.Runを併用してpowershell.exeをウィンドウ非表示で実行するとか
665名無し~3.EXE:2011/08/31(水) 13:30:16.91 ID:uaFq6iVO
>>664
>Vista/2008以降ならタスクスケジューラで「ログオンしてない時でも実行」の
オプションつけておけば窓開かないよ

お、そうなんだ!
666名無し~3.EXE:2011/09/02(金) 06:55:48.73 ID:D3J00YmV
>>663
一瞬目をつぶれば見えないよ
667名無し~3.EXE:2011/09/02(金) 17:25:56.02 ID:CZ9BIBSm
dir | ft fullname, length
というふうにmemberを選択して表示することはできますが、
出力にユーザ所望の文字列を追加したい場合にはどーしたらいいんですか?
例えば出力の頭に、インデックスを付与したいとか、

001 filename1
002 filename2


dir出力がテキストでなく、オブジェクトなのでちょっと整形するにも困っています
668名無し~3.EXE:2011/09/02(金) 17:54:40.62 ID:CZ9BIBSm
あっと自己解決しました。
669名無し~3.EXE:2011/09/02(金) 20:03:13.94 ID:OOMoKNTM
>>666
目をつぶるタイミングが難しいぞ。
670667:2011/09/03(土) 11:50:24.14 ID:ePWnVDLh
こんな簡単なプログラムなのに丸1日かかっちまった。自己嫌悪 orz

結局、dirはパイプで出力するときはオブジェクト、
単独で使うと、オブジェクトメンバーをデフォで選択して、フォーマッタ入ってるってことなんよね。
なんかしっくりこないと思ってたらここか。。。
get-member でオブジェクトのメンバーを常に確認しながら処理しないと、
画面で見えるコマンド出力結果だけを表面的に加工しようとしても駄目なんだね。
671名無し~3.EXE:2011/09/03(土) 17:32:25.73 ID:bsvKZqMt
単独で実行しようが、後ろにパイプをつけようが出力するのはオブジェクトだ。
Get-ChildItem(dir)に限らず、オブジェクトの行き場がないとき
(変数に入ったり他のコマンドに渡されたりしないとき)に、
適当な書式で画面に出力される。
672名無し~3.EXE:2011/09/03(土) 21:42:52.01 ID:t13ZaogK
こんなのでどうですか

dir | % {$i=0}{$_ | add-member -name No -value ("{0:000}" -f $i++) -membertype NoteProperty -PassThru} |select No,FullName,Length
673名無し~3.EXE:2011/09/03(土) 22:58:15.00 ID:v2IMozfi
>>672
わざわざAdd-Member使わなくても
ls | % {$i=0} { "{0:000}`t{1}" -f $i++, $_.name }
だけでいいのでは。
674名無し~3.EXE:2011/09/04(日) 07:00:58.39 ID:KGG7XhPL
>>673

そういう割り切りもあるけど、
オブジェクトじゃなくなっちゃうのが、惜しい気がする。
今後二次加工、三次加工するかもしれないし。
675名無し~3.EXE:2011/09/04(日) 13:29:48.69 ID:0H6LIEBM
>670
コマンドから返ってくるのは、オブジェクト
これに慣れてくると、楽しくなってくると思う

get-itemとかget-childitemの表示は、cmd.exeのdirの表示とソックリにする為に、かなり加工してるので、紛らわしいけど、仕組みを調べると、楽しくなってくるはず!
676名無し~3.EXE:2011/09/04(日) 21:20:31.71 ID:xJYYE5/c
時間かかる外部プログラムを複数起動させたいのだけど、start-processで実行プログラム
名のスペースはダブルクオートで囲んでOKなんだけど、実行プログラムに渡すパラメータに
スペースが含まれているとうまく動きません。
なお、& "プログラム名" "パラメータ" も試しましたが、こちらは起動はするものの逐次
実行となり複数同時起動になりませんでした。
例) start-process "C:\Program Files(x86)\optipng.exe" "C:\Program Files(x86)/*.png"
例のごとく引数がスペースでぶった切られて渡されているようです。
いいアイデアありませんか?
677名無し~3.EXE:2011/09/04(日) 21:24:49.33 ID:iwK4KHjB
(Resolve-Path "C:\Program Files(x86)/*.png") ってこと?
678676:2011/09/04(日) 21:37:32.73 ID:xJYYE5/c
Resolve-Pathは*を展開した配列を返しますよね。ここではoptipng.exeに対して
ワイルドカードを含んだ文字列そのものを渡したいのです。
もっとも私のエラーの原因はワイルドカードではなく空白のようです。
679名無し~3.EXE:2011/09/04(日) 22:04:04.22 ID:sqLryO3r
start-process "C:\Program Files(x86)\optipng.exe" """C:\Program Files(x86)/*.png"""
680676:2011/09/04(日) 22:16:46.94 ID:xJYYE5/c
>>679
おおお、なんだか全く意味がわかりませんが、動作しました。ありがとう。
よろしければ今後のためにダブルクオーテーションを3つも重ねる意味を
教えて頂けませんか。
681名無し~3.EXE:2011/09/04(日) 22:34:06.47 ID:JG97lkBt
インストール終了後に自動でシャットダウンするようなスクリプトってできるんでしょうか?
682名無し~3.EXE:2011/09/04(日) 22:54:55.74 ID:wIKFF2NF
インストールソフトのプロセスが死んだらとか
何秒間以上使用率が閾値以下だったらとか
そういうレベルでよければできると思うよ
683名無し~3.EXE:2011/09/04(日) 23:32:36.54 ID:KGG7XhPL
>>680

""に囲まれた中では、
""は"になる。

それはそれとして、
別解として、
パラメータは -ArgumentList で渡すというのもありですよ。

$arg_list = @();
$arg_list += ( 'avs2yuv.exe',$avsFullName,'-raw','-',':' );
...以下略...

みたいにじっくり渡せるから、メンテしやすいと思います。
684679:2011/09/04(日) 23:40:48.51 ID:sqLryO3r
>>680
ダブルクォート中でダブルクォートをエスケープするために2つ重ねてる
echo "a "" b" とかやれば分かるかな

もっとも、PowerShell 的にはバッククォートで `" とエスケープするのが正道なはずだが Start-Process では使えなかった
ヘルプによると .NET Framework の System.Diagnostics.Process.Start メソッドを使ってるらしいのでそのせいか

>>683
それだけだと結局スペースで分割されてしまわんか (System.Diagnostics.Process.Start の仕様で)
685名無し~3.EXE:2011/09/04(日) 23:40:54.17 ID:KGG7XhPL
>>683

で、
Start-Process って空白が入っている場合に""で囲まなくてはいけないのが分かりづらいと思う。

$paramFileName= '"{0}"' -f ( $videoFile -replace '"','""' ); # ← ""で囲む必要あり
$paramLogFile = '--LogFile={0}' -f $MEDIAINFO_LOG;
Start-Process -FilePath MediaInfo.exe -ArgumentList ($paramLogFile,$paramFileName) -Wait -WindowStyle Hidden;

みたいな感じ。
最初ぜんぜんわからなかったよ。
686676:2011/09/05(月) 00:15:41.49 ID:14RqIq9G
>>679, 683
解説ありがとう。参考になりました。
そうなんですよ、バッククォートは試したけどダメだったんです。
しかしスペースのエスケープが死ぬほどややこしいのはコマンドプロンプトバッチ
の時代から変わっていないのですね...
Linuxのシェルスクリプトもスペースを区切りに使うはずだけどエスケープで悩んだ
記憶無いんですけどね。
687名無し~3.EXE:2011/09/05(月) 22:02:51.12 ID:pp/NIHbQ
\だけでもじゃまくさかったのに ' が加わって鬱陶しさ倍増なんだな。
688名無し~3.EXE:2011/09/06(火) 00:37:31.47 ID:6XfZ0KTN
PowerShell使ってて\で躓いたことはないわ
[]なら何度も何度も何度も何度もてこずったけど
689名無し~3.EXE:2011/09/07(水) 18:41:26.28 ID:nu9fSbTn
特殊文字のエスケープは、正規表現はこれまで通り\でそれ以外は`ってところで間違えたりしない?
[]に関してはファイル名に使われてて、それを正規表現で処理しようとすると
誤動作されて大弱り([0-9]のような範囲指定マッチ検索と誤動作された。ファイル名に実際使われてるだけなのに、
範囲指定指定として動作するってどーいうこと?)。
690名無し~3.EXE:2011/09/07(水) 19:49:49.81 ID:EoBjvhaf
正規表現に出てくるエスケープ記号と関係があるようには思えないな。
691名無し~3.EXE:2011/09/07(水) 21:03:31.22 ID:zEiIn/KQ
Windowsのパス区切り文字が\なんだから、エスケープ文字を\にするわけにはいかなかったんだろ
cd C:\\Windows\\System32
とかしたくないしな

[]のワイルドカード展開はたしかに邪魔くさいけどな
692名無し~3.EXE:2011/09/07(水) 22:57:35.64 ID:VejesTHS
ファイル名には [] () {} ' みたいな危ない文字は普通使わないもんじゃないの
693名無し~3.EXE:2011/09/07(水) 23:15:57.05 ID:zEiIn/KQ
新しいフォルダ(2)とかimage[1].jpgとか、アプリケーションがデフォルトで付けてくるファイル名に
そんなのが多い気がする
そしてそんなファイル名を修正するのにPowerShellを使おうとして苦労することも多い気がする
694名無し~3.EXE:2011/09/09(金) 07:27:16.15 ID:gsGcqSZn
[]に関しては仕様以外にバグ含んでるからな
695名無し~3.EXE:2011/09/09(金) 07:38:39.00 ID:35kB4wpR
>>694
くわしく
696名無し~3.EXE:2011/09/09(金) 09:09:02.24 ID:gsGcqSZn
このスレの600あたりから読み返せや
697名無し~3.EXE:2011/09/12(月) 23:45:19.55 ID:GeZ8eWc1
>>694
がんばれがんばれ
698名無し~3.EXE:2011/09/13(火) 22:56:38.01 ID:ejMrgEEX
さて今日からのBUILDでPowerShellも新Verの話があるらしいからwktkしよう
699名無し~3.EXE:2011/09/14(水) 04:12:13.34 ID:l67rF7rr
PowerShell辞めますとか?
なんかPowerShellの方向性とは正反対のような・・・
700名無し~3.EXE:2011/09/14(水) 22:06:14.54 ID:XoNliCmM
ISEにインテリセンスが付くようでなにより。
*-Jsonとか流行のテキストデータ形式制覇する気かねぇ
701名無し~3.EXE:2011/09/14(水) 22:22:48.22 ID:Ldq9YOPc
>>700
まじで?
702名無し~3.EXE:2011/09/15(木) 00:45:12.87 ID:rbl/UoOf
PowerShell V3だって
703名無し~3.EXE:2011/09/16(金) 02:19:55.11 ID:L7rTnv3g
ほう、V3でるのか。
V2の時点でかなり完成度高いけど、ちょっとリーチしてみるか
704名無し~3.EXE:2011/09/16(金) 22:53:04.28 ID:+qvVvEXp
ISEはコード折りたたみ機能もあるっぽい
ttp://social.technet.microsoft.com/wiki/contents/articles/4667.aspx

ConvertFrom-Json / ConvertTo-Json
ttp://www.dougfinke.com/blog/index.php/2011/09/15/powershell-v3-and-json/

コマンドのデフォルト引数を動的に変更できるようになる
ttp://powertoe.wordpress.com/2011/09/15/powershell-default-parameters-in-v-3-0/
705名無し~3.EXE:2011/09/17(土) 11:49:32.00 ID:H7z4acV1
Rename-Item含むほとんどのパス指定コマンドに-LiteralPathが追加されてる
ttp://www.powershellmagazine.com/2011/09/15/how-to-find-out-whats-new-in-powershell-vnext/

*-Item系は見た感じファイルストリームも扱えるようになるのかな?
706名無し~3.EXE:2011/09/17(土) 12:28:30.08 ID:ucv/DC8j
707名無し~3.EXE:2011/09/17(土) 18:02:04.94 ID:1pMR/h/h
[]のバグはとれたんかな?
708名無し~3.EXE:2011/09/18(日) 01:00:43.79 ID:RbXN4kEn
ちょっと入れて弄ってみた
workflowという特殊な関数を作るキーワードが追加されてる
これで定義された関数はリモート操作系のコマンドに必要な処理の雛形を抱き合わせた状態になってる
例えば-ComputerNameとか-PSCredentialみたいなパラメータが自動で定義される

要するに、Invoke-Commandとスクリプトブロックでやっていたことに名前を付けて扱えるようになる機能ぽい
709名無し~3.EXE:2011/09/18(日) 13:58:45.59 ID:R/YjQfFz
DOSコマンドから独立してPowerShellコマンドとして使えるコマンドは増えてる?
2.0はDOSコマンドしかとしちゃ使えないし。
エマージェンシーやら、Winインストール途中とか、ここぞってときにPowerShellで使いたいよ。
710709:2011/09/18(日) 14:00:25.69 ID:R/YjQfFz
誤>2.0はDOSコマンドしかとしちゃ使えないし。

何かいてるんだおれは
訂正> 2.0はDOSコマンドと併用しないと使えないし。
711名無し~3.EXE:2011/09/18(日) 16:33:13.48 ID:r/n1vu9T
dosレベルでは動かないと思う

.netが要るし

712名無し~3.EXE:2011/09/18(日) 17:21:39.82 ID:v2XTc28u
DOSコマンドとどうやって併用するんだ?
713名無し~3.EXE:2011/09/18(日) 21:27:12.55 ID:IpBD/rlP
dosからpowershel.exe呼ぶのかな

普通のpowershell環境が現れる
exitでdosに戻る

もしくは、powershell.exe の引数に スクリプトファイルとか、スクリプトブロックを設定出来るから、それでかな
714名無し~3.EXE:2011/09/19(月) 00:16:51.52 ID:zmY3sPG6
>>712
そーいう意味じゃねーんだよ。PowerShellはコマンドとして機能不足、数も不足しすぎで、
DOSコマンドとして用意されたモノを使わざるを得ない場面が多々あるってこった。
copy /b すらできないだろ。ディスクパーティションだってPowerShell単独では切れないだろ。

715名無し~3.EXE:2011/09/19(月) 00:23:29.93 ID:HicXNOAa
パーティションは無理だろうけどコピーなら[IO.File]::Copy(string,string)使えばよくね。
716名無し~3.EXE:2011/09/19(月) 00:25:34.89 ID:RwWOOKax
それDOSコマンドじゃなくてWindowsコマンドだけど?
717名無し~3.EXE:2011/09/19(月) 03:23:33.11 ID:zmY3sPG6
             /)
           ///)
          /,.=゙''"/
   /     i f ,.r='"-‐'つ____   こまけぇこたぁいいんだよッ!!
  /      /   _,.-‐'~/⌒  ⌒\
    /   ,i   ,二ニ⊃( ●). (●)\
   /    ノ    il゙フ::::::⌒(__人__)⌒::::: \
      ,イ「ト、  ,!,!|     |r┬-|     |
     / iトヾヽ_/ィ"\      `ー'´     /
718名無し~3.EXE:2011/09/19(月) 03:38:54.96 ID:zmY3sPG6
結局、車輪の再発明なんだよな
日本語環境Win環境でちゃんと動くbash+Perlでいいんだよな
なんでM$ってunix文化を頭ごなしに否定すんの?
ユーザとしてはOSネイティブのシェルは無視するわけにいかんし。
C++がグダグダ状態なのでC#の必要性はわかるが今更PowerShellなんて新たに作らなくても。
M$って人余ってんのか?


719名無し~3.EXE:2011/09/19(月) 06:21:10.51 ID:zEuN9mZ0
C#で作ったソフトをシームレスに利用できるよう、PowerShellを作ったっていうものすごく自然な話
新しいシェルの重要度はWindows Serverの方が高くて、MSのサーバ製品はほとんどが.NETだから。
COMが全盛ならVBShellが出てたかもしれない
720名無し~3.EXE:2011/09/19(月) 08:06:10.74 ID:HicXNOAa
unix文化を否定って、何の話だよ。
UnixがWindowsに合わせればいいだけの話だろ。
721名無し~3.EXE:2011/09/19(月) 08:32:52.58 ID:f7okzwR+
郷に入りては郷に従え、と言ってだな
722名無し~3.EXE:2011/09/19(月) 12:38:09.17 ID:v6Hbvqpj
cp /b ってやったらどうなんの
/bなかったら?
723名無し~3.EXE:2011/09/19(月) 13:10:32.37 ID:TNRQYrt7
Active DirectoryユーザーオブジェクトのACL一括変更はできますか?
もしできるようならご助言いただけないでしょうか。
724名無し~3.EXE:2011/09/19(月) 13:52:33.74 ID:zEuN9mZ0
*-Contentに追加された-Streamパラメータ、何かと思ったら代替ストリームを指定するものだった
Set-Content filename -Stream hoge で書き込んだり
Get-Item filename -Stream * で全てのストリームを取得できる
18年越しのストリーム操作標準対応かー
725名無し~3.EXE:2011/09/19(月) 18:06:46.40 ID:qTSAGqAk
-StreamなんてFileSystemプロバイダ専用じゃないか
設計的に残念だな
726名無し~3.EXE:2011/09/19(月) 18:10:50.18 ID:RwWOOKax
ストリーム名に列挙はできるの?
727名無し~3.EXE:2011/09/19(月) 18:44:13.03 ID:zEuN9mZ0
>>725
いやいや、元々動的パラメータだから

>>726
上の方法で列挙できるよ
Microsost.PowerShell.Commands.AlternateStreamData型の配列が出力される
728名無し~3.EXE:2011/09/21(水) 01:32:06.42 ID:EmKBzrtn
>>725
ファイルシステム以外で代替データストリーム使えるのってどれ?
729名無し~3.EXE:2011/09/21(水) 02:58:24.02 ID:s9MHMYYr
>>728
ファイルシステムでしか使えないから専用なんじゃないか
730名無し~3.EXE:2011/09/21(水) 03:04:39.56 ID:51o19Q/q
ファイルシステムなら使えるてなもんじゃないだろ
使えないファイルシステムだってあるだろ
731名無し~3.EXE:2011/09/21(水) 20:15:24.16 ID:pBfj7QwJ
Win8でたら新しいPC買うわ
732名無し~3.EXE:2011/09/22(木) 01:07:52.61 ID:Wf4l4ogu
3.0 CTP 入れれた?
733名無し~3.EXE:2011/09/24(土) 19:12:31.94 ID:1jZDQsai
なんだ日本語版win7に入れれない
734名無し~3.EXE:2011/09/24(土) 22:37:06.48 ID:Q4jtanPS
意味がなんだか分かれれない
735名無し~3.EXE:2011/09/25(日) 08:23:38.03 ID:cwXVcqwQ
おでかけですか〜
れれれのれ〜
736名無し~3.EXE:2011/09/26(月) 18:49:35.55 ID:3LcYgWmZ
>>733 確かに英語版以外には入れられないみたい。
Home Premiumではロケールや地域を変えてみてもはねられた。
737名無し~3.EXE:2011/10/14(金) 04:48:51.84 ID:EIoLXRpy
このソフトって何をするためのものなの?エクスプローラーの代わりに使うような代替シェル?
738名無し~3.EXE:2011/10/14(金) 23:12:22.33 ID:gJba5mLu
暗号をクラックするためのソフトだよ
739名無し~3.EXE:2011/10/15(土) 00:55:20.81 ID:2/J++TZs
んなわけねえだろボケ
740名無し~3.EXE:2011/10/15(土) 02:14:39.51 ID:TjatCbGb
>>737
名目上はWindowsシステム管理用のコマンドシェルで、コマンドプロンプトの後継だけども、
好きな様に使えばいいんじゃないかな
741名無し~3.EXE:2011/10/16(日) 07:32:52.92 ID:JJ5MC07I
>>737
いや、Emacs Lispに変わるLispの実行環境だよ
742名無し~3.EXE:2011/10/16(日) 18:18:49.05 ID:st+auxJR
>>741
なぜそこでEmacsが出てくるの?ホントにLisp処理系が使えるんならkwsk
743名無し~3.EXE:2011/10/17(月) 09:47:52.05 ID:2y6r+IzF
いや、Prologの実行環境だよ
744名無し~3.EXE:2011/10/18(火) 07:14:15.71 ID:EUj0DIdL
Cygwinの新バージョンだと思ってた
745名無し~3.EXE:2011/10/18(火) 21:21:19.67 ID:1Kl5Inh6
いやいや、WPFの実行環境だよ
746名無し~3.EXE:2011/10/19(水) 00:56:01.36 ID:ekzlNEk3
人工知能シェルにするってゲイシが生前言ってた
747名無し~3.EXE:2011/11/01(火) 11:31:24.43 ID:eSb10lyz
http://www.atmarkit.co.jp/fwin2k/productreview/win802/win802_01.html
Windows 8 DPではこのPowerShellのコマンド(cmdlet)が強化されて、
システムのさまざまなコンポーネントを制御できるようになっている。
例えばWindows Server 2008/R2では230個ほどしかなかったcmdletが、
Windows Server 8のDP版では2400個以上になっているそうである。

また、例えば従来のようにnetshコマンドを使おうとすると、次のようなメッセージが表示され、
今後はPowerShellで操作を行うのが望ましい、などと表示される。
今後のWindowsのコマンド/スクリプト処理はPowerShellでのみ行われるようになるのかもしれない。
とうとう管理者は、バッチ・コマンド(やWshも?)に見切りをつけて(別に捨てる必要はないのだが)、
PowerShellに移行するべき時期が来たのかもしれない。

※netshコマンドでinterfaceサブコマンドを実行したところ

C:\>netsh
netsh>interface
In future versions of Windows, Microsoft might remove the Netsh functionality for TCPIPNetworking.
If you currently use Netsh interface to configure and manage TCPIPNetworking,
Microsoft recommends that you transition to Windows PowerShell.
To view a list of PowerShell commands for TCPIPNetworking management,
type Get-Command -Module TCPIPNetworking at the Windows PowerShell prompt.
Additional information about Windows PowerShell commands for TCPIPNetworking is available at
http://go.microsoft.com/fwlink/?LinkId=217627
netsh interface>
748名無し~3.EXE:2011/11/05(土) 03:15:11.01 ID:lZc+BAMC
ボリュームやミュートはどうするの?NETを使うの?
749名無し~3.EXE:2011/11/23(水) 06:53:15.68 ID:nwtiGPYP
電波テロ装置の戦争(始)
魂は幾何学、コピー出来る公安はサリンオウム信者の子供を40歳まで社会から隔離している
オウム信者が地方で現在も潜伏している
それは新興宗教を配下とする公安(慶應卒T)の仕事だ発案で盗聴器を開発したら霊魂が寄って呼ぶ来た
<電波憑依>
スピリチャル全否定なら江原三輪氏、高橋佳子大川隆法氏は、幻聴で強制入院矛盾する日本宗教と精神科
<コードレス盗聴>
2004既に国民20%被害250〜700台数中国工作員3〜7000万円2005ソウルコピー2010ソウルイン医者アカギ絡む<盗聴証拠>
今年5月に日本の警視庁防課は被害者SDカード15分を保持した有る国民に出せ!!<創価幹部>
キタオカ1962年東北生は二十代で2人の女性をレイプ殺害して入信した創価本尊はこれだけで潰せる<<<韓国工作員鸛<<<創価公明党 <テロ装置>>東芝部品)>>ヤクザ<宗教<同和<<公安<<魂複<<官憲>日本終Googl検索
750名無し~3.EXE:2011/12/01(木) 22:58:00.27 ID:v+VnhjE3
IEの制御でproxy設定を変えたいんだけどググって見た限りでは出来なさそう。
やっぱり難しい?
751名無し~3.EXE:2011/12/02(金) 10:31:41.15 ID:qFFmcrPf
>>750
自己解決しました
752名無し~3.EXE:2011/12/06(火) 23:15:17.51 ID:KWK1e1kX
PowerShellって便利なんだけど可読性低くない?
perlほどじゃないにしろ昔自分で書いたのがよく見直さないと分からんかったわ
753名無し~3.EXE:2011/12/08(木) 01:33:07.67 ID:SDWrhmRA
難読化必要ない?
754名無し~3.EXE:2011/12/08(木) 05:22:14.14 ID:MFZMVb/n
それはpowershellでやることじゃないだろ
755名無し~3.EXE:2011/12/10(土) 17:24:05.88 ID:v41SZll4
なんでやること?
756名無し~3.EXE:2011/12/10(土) 17:27:58.59 ID:FdbyxJcf
コードを解析されたくない場合や、他に流用されたくない場合で
且つ、コードをクライアント側に渡さなければ機能しない場合

代表はJavaScriptじゃね?
757名無し~3.EXE:2011/12/21(水) 23:31:30.70 ID:Uh9no9ag
bash と同様に . によって同じコンテキストで ps1 ファイルを読み込めるけど
これのヘルプってどこに載ってる?
758名無し~3.EXE:2011/12/21(水) 23:45:32.87 ID:LATDZEHO
powershell dot site:microsoft.com
759名無し~3.EXE:2011/12/22(木) 00:02:05.98 ID:pdYc6ce2
man about_??? でどこに載ってるって意味で
760名無し~3.EXE:2011/12/22(木) 00:11:57.12 ID:Ic9dlQ/6
about_Scopes
http://technet.microsoft.com/ja-jp/library/dd315289.aspx

スコープでのドット ソース表記の使用
761名無し~3.EXE:2011/12/22(木) 00:15:55.41 ID:4//kC9gB
普通にabout_Operatorsに載ってるじゃん
762名無し~3.EXE:2012/01/02(月) 20:07:34.20 ID:eH2KSe03
PowerShell 3.0で追加されるバックグラウンドジョブ関係の新機能http://winscript.jp/powershell/237
763名無し~3.EXE:2012/01/03(火) 23:42:59.58 ID:IZrRW0ay
NetCmdletsの無料ライセンス届いてたひゃほーい
764名無し~3.EXE:2012/01/05(木) 20:35:21.97 ID:0dYnCLps
PowerShell V3がDLRで実装されたことの意義

PowerShell 3 ? Finally on the DLR!
ttp://huddledmasses.org/powershell-3-finally-on-the-dlr/

・関数やスクリプトはコンパイル後実行されるので、処理速度がコマンドレットやバイナリモジュール並になる
・PowerShell固有のプロパティやメソッドをAdd-Memberで直接生の.NETオブジェクトに追加できるようになった
(今まではPSObjectでラップされていなければならなかった)

765名無し~3.EXE:2012/01/06(金) 02:24:52.25 ID:Wtd6L98k
パワーシェルが標準でついてて、従来のGUIをオプション装備にすればよかったのにな。
766名無し~3.EXE:2012/01/06(金) 14:48:25.26 ID:lUwPCu4g
標準でついてるが?
767名無し~3.EXE:2012/01/06(金) 15:06:59.80 ID:wrB39sR9
GUIがオプションのWindowsなんてありえないだろ
768名無し~3.EXE:2012/01/06(金) 22:01:54.28 ID:URKMkPa5
>>765
Windows Server ならそれが良い。
Server以外なら駄目だろ。
769名無し~3.EXE:2012/01/12(木) 10:18:54.74 ID:DQSX1NJz
770名無し~3.EXE:2012/01/18(水) 13:30:29.19 ID:Xd7vQ7nj
Windows サーバー管理者は GUI レスに備えておくべし
http://slashdot.jp/story/12/01/18/0050212/
771名無し~3.EXE:2012/01/19(木) 09:40:27.62 ID:KD8w5oL1
Win鯖からGUIなくしたんじゃUnixでいいしな
772名無し~3.EXE:2012/01/29(日) 20:51:41.63 ID:TniIjb9/
そうなると製品名もWindowsとは名乗れなくなるな。
ConsoleとかTerminalとか? これだとちょっとニュアンスが違うな…
773名無し~3.EXE:2012/01/29(日) 21:26:28.64 ID:OwbOIBLk
Midoriとか
774名無し~3.EXE:2012/02/04(土) 09:52:25.76 ID:bckIWM+B
http://blogs.msdn.com/b/b8_ja/archive/2012/02/03/file-management-feedback.aspx

Win8ベータではエクスプローラからPowerShellを起動できる
775名無し~3.EXE:2012/02/04(土) 11:19:41.55 ID:t3qSh0k8
どちらかというと Win+R に素でPowerShellのコマンド実行できるようにしてほしい
776名無し~3.EXE:2012/02/07(火) 16:39:03.86 ID:j/SIKYwY
いらねえ
777名無し~3.EXE:2012/02/07(火) 23:37:51.14 ID:9fF56c/k
cat の -Encoding オプションってヘルプのどこに載ってる?
778名無し~3.EXE:2012/02/07(火) 23:52:50.62 ID:2GA30j3P
「Windows PowerShell プロバイダーのヘルプ トピック」の「FileSystem Provider」の動的パラメータ欄
779名無し~3.EXE:2012/02/08(水) 00:29:43.17 ID:44/D4lch
PS> man about_providers

> For a list of the dynamic parameters that a provider supports, see the
> Help file for the provider. Type:
> get-help <provider-name>
と言われたので
PS> man filesystemprovider
も見てみても書いてないから困ったなあと思ったら
ジャンプリストから出せるHTMLヘルプの中に書いてあったわ。
ジャンプリスト以外で HTML ヘルプを開く方法も判らんし、
man では読めなさそうだし。
780名無し~3.EXE:2012/02/08(水) 01:25:20.45 ID:GXbKYQYS
>>779
man filesystem
781名無し~3.EXE:2012/02/11(土) 12:08:06.24 ID:MW/Nl2M4
ファイルの更新日時を修正するのって、どう書くのでしょうか?
782名無し~3.EXE:2012/02/11(土) 13:28:11.17 ID:R/6LcEvL
>>781
PS> ls .\a.txt

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2012/02/11     13:25         12 a.txt

PS > (ls .\a.txt).LastWriteTime = New-Object DateTime 2012,1,2,3,4,5
PS > ls .\a.txt

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2012/01/02      3:04         12 a.txt
783781:2012/02/11(土) 17:20:05.36 ID:MW/Nl2M4
有難う御座います

>>782
LastWriteTimeを一旦変数に入れるのもおk?
784名無し~3.EXE:2012/02/11(土) 17:34:34.72 ID:R/6LcEvL
>>783
DateTime は構造体なので変数に入れたりしてもいいし
別のファイルの日付を設定してもいい。
むしろいったん変数とかに入れないと更新できない。
(ls .\a.txt).LastWriteTime.AddYears(1) とかやっても効果なし。
785名無し~3.EXE:2012/02/11(土) 17:48:11.96 ID:E6kBBlkg
一度変数に入れても入れなくても更新は可能。>>782では変数に入れてないよな。
>>784の最後の例が更新されないのは、
そもそもLastWriteTimeの値を変更していないから。
786名無し~3.EXE:2012/02/12(日) 20:01:49.47 ID:Q5X9l0HK
そんなことやった検事が今服役中です
787名無し~3.EXE:2012/02/12(日) 21:17:43.07 ID:uXcIw/B+
誤爆かと思った。
788名無し~3.EXE:2012/02/22(水) 18:50:33.05 ID:i6jV3sBN
第3回 Windows Server 8のPowerShell3.0とIIS8.0 | Think IT
http://thinkit.co.jp/story/2012/02/21/3426
789名無し~3.EXE:2012/02/23(木) 07:50:48.54 ID:96P1BekA
Select-Objectの-Skipオプションて、指定行数スキップするだけじゃなくて、空データもスキップするよね?

これは過剰な動き、なんじゃないかな。
790名無し~3.EXE:2012/02/23(木) 13:48:53.06 ID:1Wj2fo+K
>>789
今一つ状況がつかめない。
具体的にどんな感じの場合?
791789:2012/02/24(金) 02:21:14.74 ID:8cwt8idB
>>790
$a = @( 1, $null,2,$null, 3);

として、
-Skip挟むと$nullまで読み飛ばされてしまう。

$a | Select-Object -Skip 1 | % -Begin { $c=0 } -Process { "[{0}]:{1}:" -f $c,$_; $c++ }
792名無し~3.EXE:2012/02/24(金) 04:03:14.38 ID:hKUaBlFx
単に$nullだから次のパイプラインに送られてないだけだよ、Skipとか関係なしに
793名無し~3.EXE:2012/02/24(金) 07:29:22.00 ID:VjbC17k1
>>792
お前、>>791を試してないだろ。Select-Objectの部分だけ削除してやってみろよ。
794名無し~3.EXE:2012/02/24(金) 07:38:06.17 ID:hKUaBlFx
>>793
-Skip「だけ」外して試してみ?
そりゃー、Foreach-Objectに直接渡せばそうなるわな
795名無し~3.EXE:2012/02/24(金) 07:54:37.80 ID:VjbC17k1
>>794
次のパイプラインって%のことを言ってたのか。
「$nullだから次のパイプラインに送られてない」はおかしいと思って言ったんだが。
796名無し~3.EXE:2012/02/24(金) 12:17:34.22 ID:hKUaBlFx
>>795
Select-Objectの-Skipの話をしているわけだし
それはそうと、普通配列の一部をくり抜きたいなら
$a[3..($a.Length-1)] とかそういうふうにするんじゃなかろうか
797790:2012/02/24(金) 13:04:14.32 ID:41XNSvVO
なるほどそういうことね。
おそらく-skip 導入の目的がそこにはなかったということだと思いますよ。

基本的には一連の文字列や数値列ということでなく、配列に入るものが
オブジェクトと想定しての仕様だと思ってます。
798790:2012/02/24(金) 13:07:09.47 ID:41XNSvVO
おっと忘れた >>789 へのレスです
799名無し~3.EXE:2012/02/24(金) 17:51:42.48 ID:hxZXEoYZ
PowerShellのコマンドリファレンス的な本て意外とないね。
誰か書いてくれねぇかな。
800名無し~3.EXE:2012/02/24(金) 21:50:38.91 ID:dYQRycui
>>796
ごめん、いろいろ勘違いしてた。Select-Object自体が$nullを出力しないってことか。
俺はどっちかっていうと、
配列の先頭を除外するときにSelect-Object -skipを使って、
$nullを読み飛ばしたいならSelect-Objectの前に ?{ $_ -ne $null }を入れる
……の方がしっくりくる気がする。実際そうならなかったから仕方ないんだけど。
801名無し~3.EXE:2012/02/26(日) 16:46:03.83 ID:EBzR7/5O
クリップボードに入っているコマンドをキーボードで
貼り付けたいときはどうすればいいの?
右クリックするのは面倒だし。
802791:2012/02/26(日) 16:56:59.30 ID:ecC/FfGv
>>796
それが、そもそもこれをやりたい配列は、
Excelの$sheet.Range(範囲).Value2
したもので、どうやら二次元配列になってるらしいことまでは突き止めたけど、インデックスがどのように構成されているか分からない、という体たらくで...。
[]で参照することはあきらめた次第。
803名無し~3.EXE:2012/02/26(日) 17:00:52.24 ID:puyJtfcp
>>801
普通に Alt+Space E P
804名無し~3.EXE:2012/02/26(日) 17:15:01.56 ID:i/EOArKK
AutoHotKey
805名無し~3.EXE:2012/02/26(日) 18:29:32.00 ID:/soVplsI
powershellで初めてファイル処理のスクリプトを書いているものですが、
> ls "E:\hogehoge\[]ttt"
だとディレクトリの中身が帰ってこなくて
> ls "E:\hogehoge\ttt"
だとディレクトリの中身が帰ってくるのは何故でしょうか?
シングルクォートも試しましたがダメでした。
[]が予約されているという情報が見つかりません。
806805:2012/02/26(日) 18:36:58.15 ID:/soVplsI
ゴメンナサイ。見つかりました。
-LiteralPathオプションつかえばいいんですね。
807名無し~3.EXE:2012/02/26(日) 21:08:50.55 ID:5JZDQUhy
PowerShellの仕様のうち、この3つは大きな失敗だと思う。

・Get-ChildItemなどで結果の項目が1つだと配列にならない。
・[]がワイルドカード
・不等号を使わずに -gt -lt
808名無し~3.EXE:2012/02/26(日) 21:14:03.21 ID:Gjz4tMtp
>>802
ワークシートのRange()使ってるなら、単に範囲指定するときに
差し引きたい先頭行の数だけ数字を大きくすればいいんでは?
809名無し~3.EXE:2012/02/26(日) 21:46:12.94 ID:Gjz4tMtp
>>807
演算子については、結果的に後付で新しい演算子を追加しやすい仕様になったのが
むしろ良かったんじゃないかと思う(2.0の-joinや-split、3.0の-in然り)

1..10 < 5
これで1..4のコレクションが変えるのは違和感バリバリだけど
1..10 -lt 5
こっちだとすんなり飲み込めるし(これは個人差が非常に大きいとは思うけどね)
810790:2012/02/26(日) 22:14:17.28 ID:QQsiqV/U
>>802
Excelのオブジェクト操作は普段やってないんだけど

$a=$sheet.Range(範囲).Value2
で値をとったのだったら、その範囲の左上を[1,1]として
$a[行,列] セルの値とれるようだけど。
811790:2012/02/26(日) 22:17:16.95 ID:QQsiqV/U
たとえば次のようなコーディングをすると、
1列目のデータを最終行まで出力し、2列目以降同様に繰り返す
 $ac=$Excel.ActiveSheet.Range("A1:C10").Columns.Count
 $ar=$Excel.ActiveSheet.Range("A1:C10").Rows.Count
 for($col=1;$col -le $ac;$col++){
  for($row=1;$row -le $ar;$row++){
    $a[$row,$col]
  }
 }
812790:2012/02/26(日) 22:19:50.00 ID:QQsiqV/U
あ、上の例と合わせると
$Excel.ActiveSheet.Range
のところは
$sheet.Range ですね
813790:2012/02/26(日) 22:24:07.07 ID:QQsiqV/U
ちなみに、範囲が1列または1行だけなら、行数列数取らなくても
$a|foreach{$_ } 
だけで同じことできますね。
814名無し~3.EXE:2012/02/26(日) 22:24:44.27 ID:aPYquo3t
自作カーは相変わらず頭とろいなー。
815名無し~3.EXE:2012/02/26(日) 22:30:45.92 ID:QQsiqV/U
>>807
>・Get-ChildItemなどで結果の項目が1つだと配列にならない。
常に配列にしたい場合は、@()を利用する。
たとえば
$items=@(get-childitem c:\folder1)
816名無し~3.EXE:2012/02/26(日) 22:49:44.87 ID:L9G/LpzF
>>807

結果が1つなら、むしろ配列にならないほうが自然だし、配列にしたければ、

$a = Get-ChildItem "hoge"
$a = @() + $a

とすればいいから、大した問題ではない。
817名無し~3.EXE:2012/02/26(日) 22:54:32.38 ID:L9G/LpzF
"["と"]"をエスケープしなければならないのは面倒だが、どうせ何かをエスケープしなければならない。"["と"]"を頻繁に
ファイル名に使うのはP2Pファイル共有アプリの利用者くらいではないか?

Replace-Shits.ps1みたいな名前のスクリプトでも書いて、中身をこんな感じにすればいい。

param($Recurse = $true)

$a = dir
foreach($i in $a){
  if($i){
    attrib -r $i.fullname
    $nn = $i.name.replace("`[", "{").replace("`]","}")
    $i | move -dest $nn
  }
}
if(!$Recurse){return}
$a = dir | ?{$_.mode[0] -eq "d"}
$cd = gi .
foreach($i in $a){
  if($i){
    cd $i
    Replace-Shits.ps1
    cd $cd
  }
}
return
818名無し~3.EXE:2012/02/26(日) 22:57:35.29 ID:5JZDQUhy
>>815
それは知ってる。配列を返したりFileInfoを返したりする仕様が不自然だから書いた。
819805:2012/02/27(月) 02:21:40.98 ID:H8kv1y4S
色々試行錯誤したのですが、
ls -literalpath E:\hoge[]
はしょうがないとして、
$dir = get-item -literalpath E:\hoge[]
ls $dir
もダメなんですね。

個人的な感覚だと、
1行目でエスケープしたString型のパスを引数にファイルorディレクトリオブジェクトを作成して$dirに代入したら、
lsやcdがファイルorディレクトリオブジェクトを直接引数に取れて、以降エスケープもliteralpathも必要ない、
って方が自然です。素人考えですけど・・・。

それともlsやcdとかremove-itemとかファイル操作系のcomandletに
直接オブジェクトを引数にさせる方法あるんでしょうか・・・。
820名無し~3.EXE:2012/02/27(月) 07:32:27.81 ID:MYnDDhZW
>>819

lsは基本的に、

Get-ChildItem [[-Path] <string[]>]

となっているので、文字列の代わりにDirectoryInfoを渡すと、DirectoryInfo.Nameにキャストされるのだろう。

ややこしくなるのは、

E:\[]\[]

のようなディレクトリを作った場合で、

E:\[]の中で

PS> cd -literalpath "[]"
Set-Location : 指定されたパス E:\`[`]\[] のオブジェクトは存在しませ
ん。
発生場所 行:1 文字:3
+ cd <<<< -LiteralPath "[]"
+ CategoryInfo : InvalidArgument: (:) [Set-Location]、PSArgumentEx
ception
+ FullyQualifiedErrorId : Argument,Microsoft.PowerShell.Commands.SetLocati
onCommand

という問題が起こってしまう。
821805:2012/02/27(月) 14:06:21.83 ID:H8kv1y4S
>>820
仰せの通りで、
$dir = get-item -literalpath E:\hoge
ls $dir
は自動キャストでなまじ動いてしまうので、早とちりして、最初は混乱をしてました。
私時々ファイルフォルダ名に[]使っちゃってるので、しんどいです。
シングルクオートでブラケット無視とか、comandletがパス文字列だけじゃなくて
そのDirectoryInfo型を直接引数にとるとか、変わってくれると助かるんですけどね。
822名無し~3.EXE:2012/02/27(月) 21:01:22.82 ID:3p26WjT9
シングルクオートでくくると[]を普通の文字として扱うってのは無理だろうな。
コマンドレットを呼び出した時点で、""と''のどっちでくくったか区別つかなくなってるし。
Set-WildCardを使うとそのセッション(?)の間は変更できる……なんてのがほしい。
823名無し~3.EXE:2012/02/27(月) 21:50:55.81 ID:qOG1YvKy
>>821
>comandletがパス文字列だけじゃなくて
>そのDirectoryInfo型を直接引数にとるとか、変わってくれると助かるんですけどね。

希望としては、どんな感じに?
824名無し~3.EXE:2012/02/27(月) 23:34:16.44 ID:H8kv1y4S
>>823
まああまり「私の考えた理想の〜」を議論してもしょうがないのですが、
だいたい>>819に書いた動作です。

Do-hogehoge <string>だけじゃなくてDo-hogehoge <Dir/FileInfo>
とか、そのほか高次のオブジェクトのまま引数にとる形も追加で欲しいなと。
これならブラケットを気にする必要があるのは、
Get-item等で最初パス文字列からオブジェクト変数を取得する時だけです。

PowerShellがオブジェクト指向と聞いて、こういう動作を期待するのって、
そんなにおかしくないと思うんですけどね。
825名無し~3.EXE:2012/02/28(火) 09:09:34.68 ID:eO1r1jeU
>>824
どうも理解力が乏しいもので、まだよくわかってないんだけど
get-item系自体が、system.ioかきてるので、できんじゃないだろか。
$d=get-item c:\
$d2=d.getDirectories()
d2|foreach{$_.GetDirectories()}
とかやれるので・・・
まるきり的外れ?
826名無し~3.EXE:2012/02/28(火) 16:11:02.02 ID:MBIIHL5h
>>825
的外れではないです。ありがとうございます。
C#互換だからそこまでたどれば、当然そういう動作を期待できるのですね。
そのとおりの動作が
$dir = get-item -literalpath E:\hoge
ls $dir
ぐらいの直感的な記述で実現することを期待していたんですけど。
でも、案外シェルの範疇ではやっぱりString型でやりとりするくらいが適当なのかもしれません。
827名無し~3.EXE:2012/02/29(水) 22:45:41.00 ID:Ze7p+BfF
>>826
あーやっと分かりました。
違うところは、$dirが配列なので、$dir[0]、$dir[1]などが
それぞれdirectoryinfoだから、
$dir =get-childitem c:\
$dir | foreach{ get-childitem $_.fullname }
というコーディングですね。
828名無し~3.EXE:2012/02/29(水) 22:58:49.96 ID:ML+HInvr
夢のまた夢だなぁ…
829名無し~3.EXE:2012/02/29(水) 23:01:04.54 ID:3xGFcoB+
PowerShell でMTP(Media Player Protocol)デバイス
(デジカメとかMP3プレイヤーとか)
のフォルダやファイルにアクセスするには
どうすればいいの?
830名無し~3.EXE:2012/03/01(木) 09:42:00.03 ID:224S89rR
>>817
>"["と"]"を頻繁にファイル名に使うのはP2Pファイル共有アプリの利用者くらいではないか?

ふざけんな。P2Pでなくともオーディオやビデオファイルの名分類に{}は頻繁に使うわ。
アホが勝手な憶測で邪推すんな糞野郎
831名無し~3.EXE:2012/03/01(木) 14:15:21.06 ID:o4sR1Laj
>>830

うん、"{"と"}"を使っているんだよね。なら、"["と"]"についての推測はお前と関係ないだろう。
832名無し~3.EXE:2012/03/02(金) 14:44:17.53 ID:U7YULtik
Windows PowerShell Support for Windows Server "8" Beta
http://technet.microsoft.com/en-us/library/hh801904.aspx
833名無し~3.EXE:2012/03/10(土) 10:39:45.72 ID:5nI0+QXu
.nomedia 以外全部空になったフォルダを子孫まで消すスクリプト書いてみた

引数で渡すのがFileInfoオブジェクトでなくてパス文字列なのがなんとなくダサイ気がするのと
-LiteralPathの使い方が難しいな
なんとなく[]入りのパス消せるのは確認したけど完全かどうかまだ自信ない

$dest = '消したいフォルダ'

function Delete-EmptyFolder($arg)
{
    dir -force -LiteralPath $arg | ?{ $_.Attributes -eq "Directory" } | %{ Delete-EmptyFolder $_.FullName }
    if( -not $(dir -force -exclude ".nomedia" -Path $arg) ){
        dir -force -filter ".nomedia" -LiteralPath $arg | %{ del -force -LiteralPath $(Join-Path $arg $_) }
    del -LiteralPath $arg -force
    }
}

dir -force $dest | ?{$_.Attributes -eq "Directory"} | %{ Delete-EmptyFolder $_.FullName }

ところで >>829 の方法本当に誰もわかんないの?
マイクロSDをAndroidから抜き差しするのいい加減めどいんだが、、、
834名無し~3.EXE:2012/03/14(水) 01:40:16.28 ID:sv73bJik
EXCELを新規作成したり文字を入力するのは出来るんだけど
指定のセルに罫線を付けるのはどうやったらいい?
835Himagine:2012/03/14(水) 19:07:05.75 ID:CAgqpqgi
文字が入力できてるってことだから、
部分的な例だけで大丈夫そうですね。

たとえば、A10:D15 の範囲のセルを罫線で囲むのは、
$Worksheet.Range("A10:D15").BorderAround(1,3,5)
BorderAroundの中は、(線の種類,線の幅,色)
836名無し~3.EXE:2012/03/15(木) 08:48:49.98 ID:6gXLyRWf
>>827
いまさらながら、[]がある場合
get-childitem -LiteralPath c:\ | foreach{ get-childitem -LiteralPath $_.fullname }
じゃなくて
get-childitem -LiteralPath c:\ | foreach{ get-childitem $_.fullname }
って書けたらいいよね、って話じゃね・・・
837名無し~3.EXE:2012/03/15(木) 08:50:27.97 ID:6gXLyRWf
get-childitem -LiteralPath c:\ | foreach{ get-childitem $_.}
だった。
838名無し~3.EXE:2012/03/15(木) 19:27:40.27 ID:NDYtG9oE
>>835
こんなに簡単に出来るんですね。
ありがとうございました。
839名無し~3.EXE:2012/03/20(火) 16:49:40.35 ID:vOJN30D8
psスクリプト?内で実行したプログラムの標準出力を取得して表示させたいのですがどうすればいいのでしょうか?
840名無し~3.EXE:2012/03/20(火) 16:53:46.22 ID:vOJN30D8
追記

ttp://www.atmarkit.co.jp/fwin2k/operation/wsh05/wsh05_03.html
自分自身のIPアドレスを表示するサンプル・スクリプト

上記のWSHスクリプトの内容をPowerShellでやりたいのですが今ひとつピンとこなくて困ってます
おわかりの方がいましたらどうぞよろしくお願いします
841名無し~3.EXE:2012/03/20(火) 17:22:40.80 ID:IhAWRTHQ
>>839
$x = whoami.exe
>>840
[Net.NetworkInformation.NetworkInterface]::GetAllNetworkInterfaces()[0].GetIPProperties().UnicastAddresses
842名無し~3.EXE:2012/03/20(火) 20:50:50.68 ID:vOJN30D8
>>841
いえ、IPでは無くスクリプト内で起動したプログラムの標準出力を取得したいのです
843名無し~3.EXE:2012/03/20(火) 20:57:57.53 ID:YMx9Q8bF
>>841の前半も読めよ。
844名無し~3.EXE:2012/03/20(火) 21:58:47.22 ID:vOJN30D8
どなたかお願いします
845名無し~3.EXE:2012/03/20(火) 22:03:15.16 ID:IhAWRTHQ
$x = echo "前半も読めよ"
846名無し~3.EXE:2012/03/20(火) 22:11:36.78 ID:vOJN30D8
だから起動した実行ファイルの標準出力を取得したいんです…
         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
847名無し~3.EXE:2012/03/20(火) 22:16:00.12 ID:vOJN30D8
あ、進捗状況等で時間のかかる出力をリアルタイムで取得したいと言った方がいいのかな?
このやり方 $x = hoge.exe だと何故か取得出来ない…
848名無し~3.EXE:2012/03/20(火) 22:34:29.56 ID:IhAWRTHQ
標準エラー出力に出てるんじゃないか?
hoge.exe 2>&1 | Set-Variable -Name x
リアルタイムってのが何を言ってるのかわからんが
コンソールにも出して尚且つ変数にも入れたいなら tee 使っとけ。
849名無し~3.EXE:2012/03/20(火) 23:06:28.87 ID:YMx9Q8bF
>>847
ようやく分かった。こういうことをやりたいのか?

$process = New-Object Diagnostics.Process
$process.StartInfo.FileName = "ping"
$process.StartInfo.Arguments = "-t 127.0.0.1"
$process.StartInfo.CreateNoWindow = $true
$process.StartInfo.UseShellExecute = $false
$process.StartInfo.RedirectStandardOutput = $true
$process.Start()
while($true){$process.StandardOutput.ReadLine()}

これより手っ取り早いやり方があるかもしれないけど俺は知らん。
850名無し~3.EXE:2012/03/20(火) 23:35:40.61 ID:SfKYezEb
今回の場合なら
Start-Process C:\WINDOWS\system32\ipconfig.exe -ArgumentList 0.0.0.0 -NoNewWindow -Wait
でいいと思う

出力あった時にイベント処理がしたい場合は、>>849みたいなやり方しかない
851名無し~3.EXE:2012/03/20(火) 23:38:52.75 ID:SfKYezEb
あ、ごめん勘違い、代入した言って話か・・・じゃあ>>849しかないな
852名無し~3.EXE:2012/03/24(土) 16:17:00.95 ID:ztKxBc2J
excelの表示倍率をPowershellで変更する方法ってありますかね?
853Himajin:2012/03/25(日) 23:25:51.63 ID:1V151LTe
>>852
$xl = new-object -comobject excel.application
のように$xlにインスタンスが割り当てられているなら

$xl.ActiveWindow.Zoom=150
ってな感じ
854名無し~3.EXE:2012/03/26(月) 01:04:33.77 ID:oEO0u+/r
>>853
出来ました!
ありがとうございます。
855名無し~3.EXE:2012/03/27(火) 00:50:36.77 ID:inAh1wn/
Script Explorer for Windows PowerShell
http://www.infoq.com/jp/news/2012/03/Script-Explorer
856名無し~3.EXE:2012/04/15(日) 22:57:57.96 ID:pkSJReQW
特定フォルダのサイズを求めたいです。以下のようにしたできたのですが、
Get-ChildItem -Path "c:\Documents and Settings" -Recurse -Force | ForEach-Object -Begin { $Len = 0 } -Process { $Len = $Len + $_.Length } -End { $Len }
ここで他のホストのフォルダを指定するにはどうしたらよいでしょうか。
857名無し~3.EXE:2012/04/20(金) 21:03:54.55 ID:QlVpncDd
windowsのショートカットで
powershell c:\foo\hoge.ps1
としてpowershellスクリプトを実行するようにしています.
マウスでクリックするぶんには良いのですが
cmd.exeから.lnkを実行しようとしてもリンク先のファイルをクリックしたのと
同じあつかいになるみたいでノートパッドで開かれるだけです.
.lnkをクリックした時と同じように動作させるにはどうしたらよいでしょう?
858名無し~3.EXE:2012/04/21(土) 00:44:02.15 ID:yTqO4Tyd
解決しました.すみません。
859名無し~3.EXE:2012/04/21(土) 11:12:33.69 ID:m7D/t1la
>>858
方法書いとけ
860名無し~3.EXE:2012/04/21(土) 16:47:41.12 ID:iaRP3Ara
> hoge.lnk
861名無し~3.EXE:2012/05/03(木) 15:41:50.33 ID:6zZnPu7R
フォルダ名だけ与えるとそのフォルダ内の全エクセルファイルのシート名を全て表示する。
これをなるべく短いコマンドでやることって難しいでしょうか?
書いてみたけどうまく動きません・・・

gci c:\tmp -include *.xls -recurse | % {$e.Workbooks.Open($_.fullname,$null,$true) | % ($s in $e.worksheets){$s.name}}
862861:2012/05/03(木) 15:47:32.35 ID:6zZnPu7R
最初の1行が抜けてました。

$e = New-Object -ComObject Excel.Application
863名無し~3.EXE:2012/05/03(木) 17:42:27.16 ID:6vyoHuAw
>>861
最後Foreach-Objectとforeach構文がごっちゃになってる
foreach構文はパイプラインの中では使えない

ls 省略
| % { $e.Workbooks.Open( $_.fullname ,$null,$true).worksheets } | % { $_.name }

V3だったら最後こう書けるけど、それくらい

| % { $e.Workbooks.Open( $_.fullname ,$null,$true).worksheets.name }
864名無し~3.EXE:2012/05/03(木) 20:08:54.42 ID:6zZnPu7R
>>863
うまくいきました。ありがとうございます!
ちなみに最後に

$e.Quit()
[void][System.Runtime.InteropServices.Marshal]::FinalReleaseComObject($e)

ってやるんですが、タスクマネージャから消えてくれません・・・
普通これで消えるんですよね?
バージョンが古い(EXCEL2000)からかも・・・
865Himagine:2012/05/03(木) 20:30:43.90 ID:bmFSyBqH
>>864
こんな感じかな。変数のRemoveが必要でしょうね。

[System.Runtime.Interopservices.Marshal]::ReleaseComObject($e)
Remove-Variable e
866Himagine:2012/05/03(木) 22:00:05.38 ID:bmFSyBqH
ごめん、Remove無くても消えるね。
ってことは、やはりバージョンだろか?
867名無し~3.EXE:2012/05/03(木) 22:32:28.81 ID:KDSIYBDw
$e.ExecuteExcel4Macro('CALL("Kernel32","ExitProcess","JJ",999)')
868名無し~3.EXE:2012/05/03(木) 22:36:18.34 ID:6zZnPu7R
>>866
レスサンクスです。
家のPCはWinXP-Homeのすごく古いもので、実際にこのスクリプトを使うのは
会社のWin7機(EXCEL2010)なので問題なく消えるような気がしてきました。
わざわざ試して頂いてありがとうございます。
869名無し~3.EXE:2012/05/03(木) 22:47:53.65 ID:6zZnPu7R
>>867
あっ、ありがとうございます。
「リモートプロシージャコールに失敗しました」みたいなメッセージは出ましたが、一発で消えました・・・
これで自宅でもこのスクリプトが使えます。ありがとうございました。
870名無し~3.EXE:2012/05/04(金) 03:40:33.94 ID:pPdyyxM3
とりあえずExcelとファイルとファイルの中のシート開くのに使った変数.Close() して変数自体を$null
最後に[GC]::Collect()しとけばだいたいあってる
871名無し~3.EXE:2012/05/19(土) 22:43:50.06 ID:z0tuVkey
「Sheet2が選択された状態でEXCELファイルを開く」ということをしたくて以下のコードを書いたのですがうまく動きません・・・
エラーにはならないのですが、どこが悪いのか教えて下さい。

$file="C:\aaa.xls"
$app = New-Object -ComObject Excel.Application
$app.visible = $true
$wb = $app.Workbooks.Open($file,$null,$true)
$wb.worksheets.Sheet2.select
872871:2012/05/19(土) 23:56:56.94 ID:z0tuVkey
自己レスです。
最後の行を↓にしたら出来ました。お騒がせしました。

$wb.worksheets.item("sheet2").select()

ただ新たな問題が出てきました。
これをやったあと画面に表示されたEXCELを画面右上の「×」ボタンで終了させるとEXCEL.EXEというプロセスが残ってしまいます。
taskkillとかするしかないんでしょうか?できればEXCEL終了と同時にプロセスも消えて欲しいのですが・・・
873名無し~3.EXE:2012/05/20(日) 15:43:41.98 ID:IBtJUAZy
powershell側からの参照はすべて解放してるのか?
874名無し~3.EXE:2012/05/21(月) 07:23:50.52 ID:XpNJnbsM
>>872
消えないのが普通じゃないかな。
>>865 に例があるように
Comオブジェクトを解放しないといけないんだと思う。
875名無し~3.EXE:2012/06/03(日) 07:52:13.62 ID:bqXVPhoX
エクセルのある1セルをコピーしてtmp.txtにペーストして保存したとして、
エクセルでの改行(Alt+Enter)を普通の改行に変換した状態でこのtmp.txtの内容を表示させることはできますか?
876名無し~3.EXE:2012/06/03(日) 14:42:31.82 ID:ogb5B2sf
>> 875
Office がインストールされているPC上なら可です。
877名無し~3.EXE:2012/06/05(火) 17:06:19.94 ID:rXquLUol
> C:\Users\user1> class
> このバージョンの言語では、'class' キーワードがサポートされていません。
これはそのうちオブジェクト指向対応ってことで期待していいのですね?
878名無し~3.EXE:2012/06/08(金) 14:19:36.54 ID:oaH4MR8B
>>877

期待するのは自由だ。
879名無し~3.EXE:2012/06/08(金) 23:39:28.14 ID:0qxpjBP1
ファイルを作って、そのファイルを圧縮する方法を教えてください。
880名無し~3.EXE:2012/06/09(土) 07:07:07.29 ID:GWTFrc0s
>>879

new-item "hoge" -type file
compact "hoge" /c
881名無し~3.EXE:2012/06/09(土) 13:58:44.41 ID:17+lgxK6
>>800
ありがとうございます。
そのプログラムの説明をしてくれたらありがたいです。
度々申し訳ないです。
882名無し~3.EXE:2012/06/09(土) 20:01:17.57 ID:RQlvgCzh
>>800
すいません。自己解決しました。
ありがとうございます。
883名無し~3.EXE:2012/06/10(日) 14:08:43.19 ID:ppkMEnX8
「全てのウインドウを最小化してタスクバーにしまう」は「Windowsキー+M」で出来ますが、Powershellで「タスクバー内の全てのウインドウを元に戻す」は出来ますでしょうか?
「Windowsキー+Shift+M」だと「Windowsキー+M」で最小化したウインドウのみが元に戻るだけでした。
884名無し~3.EXE:2012/06/10(日) 22:24:37.04 ID:QLch2PsA
スクリプトを使って違うディレクトリからファイル名が数字のファイルを取り出しそのファイルを圧縮する方法を教えてください。
885名無し~3.EXE:2012/06/11(月) 00:03:59.46 ID:mqFLiHMK
違うディレクトリからGet-childitemして正規表現つかってファイル選別して圧縮するクラス呼んべ
886名無し~3.EXE:2012/06/11(月) 02:13:27.42 ID:O0LQka//
>>885
その圧縮の仕方がわからないっす。
887名無し~3.EXE:2012/06/14(木) 20:43:12.20 ID:BETGwS5f
3.0でやっとタブ補完が自分で作ったのと同じくらいましになってくれた・・・
でもやっぱ普通のコンソールでもタブ補完でコピペ機能を標準で付けてほしいな
888名無し~3.EXE:2012/06/17(日) 17:49:15.84 ID:3shiXDXK
>>883
windowを列挙してsendmessageすれ
889名無し~3.EXE:2012/06/19(火) 22:15:46.79 ID:hGKihNyx
PowerShellで「Get-ChildItem "C:\Windows" -Recurse」とか実行すると
ちょうどコマンドプロンプトで「dir /s "C:\Windows"」ってやった時みたいにフォルダ毎に別れた表示になるけど、
これを「dir /s /b "C:\Windows"」ってやった時みたいにファイル名をフルパスでの表示にすることは難しいですか?
890名無し~3.EXE:2012/06/19(火) 22:29:07.16 ID:iWR63QUn
ls -r | % {$_.fullname}
891名無し~3.EXE:2012/06/19(火) 22:50:37.07 ID:hGKihNyx
>>890
出来ました!即レスサンキューです!
で、ついでと言っては申し訳ないのですが、ファイル名の前に更新日時を出すにはどうしたらいいですか?
以下のように書いてみたのですがエラーになってしまいます。
たびたびすいません…

ls "c:\windows" -r | % {$_.LastWriteTime + ' ' + $_.fullname}
892名無し~3.EXE:2012/06/19(火) 22:55:48.84 ID:qwH/8wSh
>>891
{'' + $_.LastWriteTime.ToString() + ' ' + $_.FullName}
または
{$_.LastWriteTime.ToString() + ' ' + $_.FullName}

PowerShell 的には
| select LastWriteTime,FullName
を推奨
893名無し~3.EXE:2012/06/19(火) 22:56:23.25 ID:qwH/8wSh
1行目は ToString() が余分だったな
894名無し~3.EXE:2012/06/19(火) 23:10:51.95 ID:hGKihNyx
>>893
望む結果を得ることが出来ました!
しかし「''+」をつけることで「.ToString()」が不要になるんですね。こちらの方が打ち込むキー数が少ないので助かります。
しかも「''+」と「.ToString()」では年月日の順序が変わったり時の位が1桁の時にゼロ補完が行われたりなどの違いがありますね。奥が深いです…
ともかくありがとうございました!
895名無し~3.EXE:2012/06/21(木) 17:17:37.72 ID:ujk59abd
>>894

例えば、$cにあるファイルの情報が入っているとする。

PS> $c.LastWriteTime

2011年9月25日 15:04:56

この「2011年9月25日 15:04:56」で表示されているLastWriteTimeの型を調べると、

PS> $c.LastWriteTime.GetType()

IsPublic IsSerial Name                                    BaseType
-------- -------- ----                                    --------
True    True    DateTime                                System.ValueType

DateTime型だということがわかる。

一方、Nameのほうは

PS> $c.Name.GetType()

IsPublic IsSerial Name                                    BaseType
-------- -------- ----                                    --------
True    True    String                                  System.Object

String型になる。

空文字列''にDateTimeを足そうとすると、DateTimeはStringに変換される。

DateTimeにStringを足そうとしても、StringはDateTimeに変換されず、エラーが出る。
896名無し~3.EXE:2012/06/21(木) 22:45:32.42 ID:lY+E+eJT
"Get-Process | Select-Object Name,Id"ってやるとNameが画面左端、Idが右端に表示されるがこれって詰めて表示できんのかね?
見づらくてしょうがないんだが?
897名無し~3.EXE:2012/06/21(木) 22:58:42.37 ID:kBIipP/m
format-table -autosize
に渡してやると良いかも
898名無し~3.EXE:2012/06/21(木) 23:37:07.22 ID:lY+E+eJT
>>897
うまくいったよありがと。
エイリアス使うと"ft -a"でいいんだな、こりゃいい。
899名無し~3.EXE:2012/06/24(日) 23:13:59.88 ID:Vcd0w504
cmdからカレントディレクトリのスクリプト呼び出す場合

powershell hello.ps1
powershell .\hello.ps1
は駄目で
powershell %cd%\hello.ps1
はうまく言ったんですが常にフルパスを指定しないと駄目なんですか?
900名無し~3.EXE:2012/06/24(日) 23:40:01.30 ID:LnWLT6Ns
>>899
普通に .\hello.ps1 でできたよ?
901名無し~3.EXE:2012/07/18(水) 16:29:03.14 ID:k22OGd2K
powershell_ise.exe

echo hoge > hage.txt
とかしてデバッグしても
ファイル出力されませんがなんとかならんでしょうか?
あとコマンドのヘルプってなにかのショートカットキーで見れませんか?
902名無し~3.EXE:2012/07/18(水) 16:38:56.54 ID:k22OGd2K
あとなんか,例えば
copy -?
すると
<string[]>
とかいうのが書かれているんですが,
これって文字列をいくつかって意味に見えたので
a.txt ./hogedir/a.txt b.txt ./hogedir/b.txt
みたくすればいいのかと思ったのですが動きません。。。
なんなんでしょう?
903名無し~3.EXE:2012/07/18(水) 17:15:32.42 ID:k22OGd2K
解決しますた。すいません。
904901:2012/07/23(月) 17:17:14.84 ID:Smkw0z4b
powershell_ise.exeのほうはよくわかりません(T_T)。
どうにかならんですか
905名無し~3.EXE:2012/07/23(月) 19:09:29.79 ID:4zG3dVet
>>904
C:\windows\system32に書き込もうとして権限無くてこけてるだけじゃねーの?
あとヘルプはF1
906名無し~3.EXE:2012/07/27(金) 17:33:25.71 ID:+Qzoas8E
powershellで直前にやった操作を元に戻す方法ってありますか?
具体的には
\a\フォルダ
\b\フォルダ
\c\フォルダ
・・・
の中にあるファイルをそれぞれ1階層上に移動しようと思っていたのですが、
間違えてひとつのフォルダに移動してしまいました
907名無し~3.EXE:2012/07/27(金) 17:54:19.02 ID:3ibB40k4
トランザクションがFileSystemプロバイダでも使えたらねえ・・・
908名無し~3.EXE:2012/07/27(金) 17:59:32.16 ID:C+BTr7Oy
ぎゃくにどこでトランザクションなんて使えるの?
909名無し~3.EXE:2012/07/27(金) 18:07:38.89 ID:+Qzoas8E
トランザクションを調べてみました
いまいちまだ理解できていないのですが、Move-Itemはトランザクションをサポートしていないという事でしょうか?
910名無し~3.EXE:2012/07/27(金) 18:11:40.04 ID:+Qzoas8E
ちなみに間違えて打ったコマンドはこれです
Get-ChildItem A\B\?????? -Include *.txt -Recurse | Move-Item -Destination ../
911名無し~3.EXE:2012/07/27(金) 19:29:03.60 ID:3ibB40k4
>>908
トランザクションがサポートされているのはRegistryプロバイダのみ

>>909
コマンドレットがサポートしてないんじゃなくて、プロバイダがサポートしてない
どっちみちstart-transactionしてから各コマンドレット利用時に-UseTransactionを指定しないと
トランザクションは有効にならない
諦めて再移動すべし
912名無し~3.EXE:2012/07/27(金) 19:50:27.72 ID:+Qzoas8E
あきらめて再移動します
質問に答えてくださった方々ありがとうございました
913名無し~3.EXE:2012/07/28(土) 15:10:21.92 ID:MsKu4N7f
replaceを使って、最初の"X"のみを"Y"にしたいんですが、

"abcXdefXghi" → "abcYdefXghi"

"abcXdefXghi" -replace "^.*?X","Y"
だと結果は
YdefXghi
になってしまいます。
どのように書けばよいものでしょうか?
ただし、"abcX"は"bcdX"もあれば"cX"なんかもあったり
します。
よろしくお願いします。

914名無し~3.EXE:2012/07/28(土) 16:08:16.28 ID:zGx9ifeU
>>913
2行になっちゃうけど
"abcXdefXghi" -match "^(.*?)X"
"abcXdefXghi" -replace "^(.*?)X","$($Matches[1])Y"
915名無し~3.EXE:2012/07/28(土) 16:41:14.12 ID:/sSP4o/R
"abcXdefXghi" -replace '(^.*)X(.*$)', '$1Y$2'
とかでいいんではなかろうか
916名無し~3.EXE:2012/07/28(土) 18:50:51.43 ID:MsKu4N7f
913です。
>>914さん。>>915さん
有り難うございます。なるほどですね。
"()"でグループ化(分離)させといて要素でアクセスですか。
なかなか"abcX"をどうやって分離するのかがわからなくて。
本当に有り難うございました。
917名無し~3.EXE:2012/08/04(土) 17:19:23.90 ID:iluO2ZP7
PowerShell経由でIEのオートメーションする時に

  $ie = New-Object -com "InternetExplorer.Application"
  $ie.navigate("http://www.hogehoge.com/")
  $ie.visible = $true

  $doc = $ie.document
  $doc.getElementById("ID")

最後のgetElementByIdが、一部の環境で正常に動作しない
(getElementByIdに、引数を1個指定可能なオーバーロードが無い…とエラーメッセージが返ってくる)

  OK … 自宅のVista、勤務先の2008R2
  NG … 勤務先のVista、勤務先のWin7

これって何で…?
918名無し~3.EXE:2012/08/04(土) 18:26:10.30 ID:WQerdy4X
IEのバージョンも書かんとわからんがな…(´・ω・`)
919名無し~3.EXE:2012/08/04(土) 22:00:42.67 ID:iluO2ZP7
全環境、IE9 + PowerShell2.0
920名無し~3.EXE:2012/08/05(日) 20:27:37.31 ID:/6Pk7K3z
a.txtの内容が

aaa"
bbb"
ccc"

で、各行の最後の「"」を削除したくて↓みたいなスクリプト書いたんですが削除出来ない。
ヒントでもよいので誰か原因わかりませんか?
ちなみに最終行の「"」は削除出来なくて構いません。

$s = [io.file]::ReadAllText('a.txt', [System.Text.Encoding]::DEFAULT)
$s -replace "`"`r`n","`r`n" > b.txt
921名無し~3.EXE:2012/08/05(日) 20:44:28.74 ID:/6Pk7K3z
↑ですが、「"」は行末以外にもある可能性があるので

$s -replace "`"","" > b.txt

とかじゃダメなんです。よろしくお願いします。
922名無し~3.EXE:2012/08/05(日) 20:56:35.48 ID:ZlaBr84t
>>920
普通に削除できるが?
a.txtの改行コードがCRLFになってないだけじゃ?
923名無し~3.EXE:2012/08/05(日) 21:02:06.37 ID:/6Pk7K3z
>>922
ありがとうございます。
確かに

$s -replace "`"`r","`r" > b.txt

にしたらうまくいきました。
すみません見直して見ます…
924名無し~3.EXE:2012/08/05(日) 21:10:13.24 ID:/6Pk7K3z
すみません、再度質問です。
エクセルのA1セルに「AAA」、A2セルに「BBB」を入力し、この2セルの内容をメモ帳にコピペした場合、
1行目と2行目の間にあるのはCRLFではないのでしょうか?
スレチなのですがそのテキストファイルをPowerShellで加工する必要があるのでどうかお願いします。
(ちなみにメモ帳の文字コードは「ANSI」となっています。)
925名無し~3.EXE:2012/08/05(日) 23:14:40.47 ID:/6Pk7K3z
すみません、スクリプトがミスってました。
結論から言うとちゃんとCRLFでした。
お騒がせしました…
926名無し~3.EXE:2012/08/06(月) 07:23:59.51 ID:QrM1WtQa
むしろわざわざコピペしないでなぜExcelの中で操作しない
.netから直接読むなりCOMで読むなりすればいいじゃん
927名無し~3.EXE:2012/08/14(火) 14:21:49.86 ID:vOx/2EOh
powershell初です
便利ですね

でもスクリプトは過去にいたずら等あってセキュリティがガチガチなんですが
人に配って使ってもらう簡単なツールなどの場合は署名とるしかないんでしょか?
説明してあれこれするにはめんどくさいw
928名無し~3.EXE:2012/08/14(火) 14:25:04.66 ID:geQKvXYR
Execなんとかポリシーをリモートなんたらに設定してもらえば大丈夫なはず
929名無し~3.EXE:2012/08/14(火) 14:27:03.53 ID:vOx/2EOh
powershellを管理者権限で起動してSet-ExecutionPolicy RemoteSignedですよね・・

もうこの時点で厳しそう

XP時代に甘い管理で飼いならしちゃったので厳しい・・・
930名無し~3.EXE:2012/08/14(火) 23:58:11.07 ID:6ubj4yJi
>>929
起動オプションで実行ポリシー指定する場合は管理者権限いらない
powershellのスクリプトを実行するバッチファイルを一緒にくっつければOK
931名無し~3.EXE:2012/08/16(木) 10:14:05.62 ID:Jus/qT3j
セキュリティ回避させてOKとかwwww
932名無し~3.EXE:2012/08/17(金) 01:13:58.26 ID:Uz9bOEzk
>>931
そりゃまぁバッチが実行できるような状態でセキュリティ云々言ってもしょうがないからねぇ
そこではMSも利便性を優先させたわけさ
実行ポリシーは内部犯を防ぐことは考慮されてないってこと

じゃあDLしたバッチがZoneIDでブロックされてなくて、
それがPowerShell呼び出したらアウトじゃんってなるんだけど
いやもうまったくもってその通りです
933名無し~3.EXE:2012/09/06(木) 15:30:43.16 ID:aM7DGVXG
正規表現で複数行の範囲を取り出したいんですがうまくいかないのでおかしいところを教えてください
hoge.txtの中に下記のようなG00で始まりA99,,,,で終わるデータがならんでます

G00,1,hoge,,
Z00,座標データ,,,
A00,,,,
-25578.2378 -10551.4829 A01,1,hoge1
-25577.7598 -10550.6659 A01,2,hoge2
-25574.8438 -10541.3919 A01,3,hoge3
A99,,,,


$text = Get-Content .\hoge.txt
$text -match '(?mx:^G00.*?A99,,,,$)'
$matches
934名無し~3.EXE:2012/09/06(木) 22:01:30.76 ID:wtnfBiZh
935名無し~3.EXE:2012/09/07(金) 00:30:00.29 ID:ftiWefT5
>>933
Get-Content の出力は配列になってるから(3.0なら-Rawオプションがあるが)、
-match演算子使うと各行ごとにマッチするやつだけ返そうとしてどれもマッチしないからうまくいかない
あと-match演算子はパターン最初にマッチしたところで終わるから全部をマッチさせることはできない
やるとすれば[Regex]::Matchesメソッドとかを使うのがいいんじゃないか
936名無し~3.EXE:2012/09/08(土) 02:14:40.86 ID:klpBtIG1
>>935
ありがとうございます
get-help get-contentしたら配列表記でてるのを見落としてました
結局マッチを楽にするのにまず正規表現で不要な記号とか削ってから[Regex]::Matchesで解決できました
937名無し~3.EXE:2012/09/10(月) 15:45:56.21 ID:Ef6We+9F
PS3の連載記事はよ
938名無し~3.EXE:2012/09/11(火) 21:43:09.43 ID:cfe8XvZ+
A.ps1

$Test = Get-ChildItem
powershell -Command .\B.ps1 "Test" $Test

B.ps1

param($value, $Test)
Write-Host $Test

とするとBの$Testには配列で格納されません。
配列を他のファイルに渡すにはどうすればいいですか?
939名無し~3.EXE:2012/09/11(火) 22:12:45.65 ID:I73M2qay
試してないけど ' か {} で全体囲めばいいんじゃね
powershell -Command '.\B.ps1 "Test" $Test'

そもそもPowerShell上でスクリプト呼ぶなら、わざわざもう一度PowerShell呼び出さなくてもいいと思うけど
940名無し~3.EXE:2012/09/11(火) 22:36:59.97 ID:I73M2qay
って、すまん別プロセス立ち上げてるんだから変数のまま渡せるわけないな
やるなら単純に .\B.ps1 "Test" $Test か、
どうしても別プロセスでやるならClixmlに変換してから渡すくらいかね
941名無し~3.EXE:2012/09/12(水) 18:55:53.34 ID:6Sf7c0ds
test.ps1
-----
while ($true) {
 start-sleep -milliseconds 100
 write-host "."
 $array = [management.automation.host.choicedescription[]](
  (new-object management.automation.host.choicedescription "&Yes","Yes"),
  (new-object management.automation.host.choicedescription "&No","No")
  )
 if ($host.ui.promptforchoice("", "続行しますか?", $array, $array.count - 1) -ne 0) {
  break
 }
}
----
Powershell3にてこのスクリプトを実行した際、コンソールウィンドウ右上の×をクリックして終了させると
ウィンドウが閉じるまでやたら時間がかかるんだけど原因分かりますか?
powershell.exe -version 2 -command ".\test.ps1"
って実行させた際や、Ctrl+Cで終了させる場合はすぐに閉じるんですが・・・
OSはWin7sp1x64です。
942名無し~3.EXE:2012/09/26(水) 23:44:13.61 ID:IqWSIyvi
PowerShellってVBSみたいに難読化できる?

配布すること考えるとVBSかやっぱ
943名無し~3.EXE:2012/09/27(木) 21:54:51.20 ID:xNo+RTVz
VBSみたいに難読化? ご冗談でしょ

944942:2012/09/27(木) 23:33:51.81 ID:joGXkFTw
>>943
いたって本気ですが。
945名無し~3.EXE:2012/09/28(金) 02:19:41.47 ID:Zxt+/MnS
VBSの難読化ってどうやるんだろ?

まあ、おれがプログラム組むといつも難読だけど。
946名無し~3.EXE:2012/09/28(金) 03:23:29.31 ID:STLb2Q0g
VBSに埋め込めばできるでしょう。。。
947名無し~3.EXE:2012/09/28(金) 17:27:28.99 ID:E7xF4Dhp
難読したもの貼ってみろよ1行で解読できるから
948名無し~3.EXE:2012/09/28(金) 20:53:49.44 ID:0g1mZmwe
949名無し~3.EXE:2012/09/28(金) 23:14:41.78 ID:E7xF4Dhp
encodeだろdecode1行
950名無し~3.EXE:2012/09/29(土) 00:48:50.27 ID:eeyla3XL
>ただし、コード内に2bytesが含まれている場合には、その部分だけはエンコードされないので、注意すること
ダメじゃねーか1!!
951名無し~3.EXE:2012/09/29(土) 18:22:06.25 ID:9gsFE+ls
>>950
コードに2バイト入れるなよ・・・
VBAか
952名無し~3.EXE:2012/09/29(土) 21:35:24.90 ID:DIYzY5/K
何どす化?
953名無し~3.EXE:2012/09/30(日) 08:32:20.77 ID:cT3sa/R8
Out-File -Encoding UTF8 だと BOM 付きの UTF-8 になっちゃうけど
BOM なしにするにはどうすればいい
954名無し~3.EXE:2012/09/30(日) 17:51:06.37 ID:Y5RgReM3
[Text.Encoding]::GetBytes() 使うか、どっかから nkf コマンド拾ってくるか、Connect で要望出して採用されるの待つか、その辺で。
955名無し~3.EXE:2012/09/30(日) 20:10:17.89 ID:qf11wgWO
>>953
$utf8=New-Object System.Text.UTF8Encoding $false
$writer=New-Object System.IO.StreamWriter "C:\text.txt",$false,$utf8
$writer.Write("あああ")
$writer.Close()
956名無し~3.EXE:2012/10/05(金) 14:23:31.75 ID:xVBx1poh
957名無し~3.EXE:2012/10/13(土) 21:55:43.01 ID:NoKCNVgA
ACCESSに接続してレコードを読み込んだり書き込んだりしたいんだけど、
上手くいきません。
参考ソースか解り易いサイトありませんか?

958957:2012/10/14(日) 21:14:33.89 ID:lPlYHEKJ
すいません、ACCESSに接続してレコードを読み込むことは出来ました。
しかし、INSERT分を使用してデータの追記が上手くいきません。
---------------------------------------------------------------------------
#接続文字列を準備する
$connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=$dataSource;"

#データソースに接続し開く
$connection = New-Object System.Data.OleDb.OleDbConnection $connectionString
$connection.Open()
$command = New-Object System.Data.OleDb.OleDbCommand $sqlCommand,$connection

$command.ExecuteNonQuery()
$connection.Close()
----------------------------------------------------------------------------

$sqlcommandには実行時に"INSERT INTO テーブル名 (列名1,列名2) VALUES (値1,値2)"
を引数で渡しています。

発生するエラー内容ですが、
"0"個の引数を指定して"ExecuteNonQuery"の呼び出し中に例外エラーが発生しました:
"INSERT INTO ステートメントの構文エラーです。"
と表示されます。
試しにACCESSのクエリから上記のINSERT分を実行しましたが問題なくデータは入りました。
プログラム自体の問題と思いますがご教授願えませんでしょうか?
959名無し~3.EXE:2012/10/16(火) 00:30:02.71 ID:i8flTIpJ
実行中のアプリケーションが、自分を起動したのがPowerShellなのかcmd.exe
なのか判定する方法ってあるの?
960名無し~3.EXE:2012/10/16(火) 00:38:19.90 ID:hDEuttua
親プロセスを見れば?
961名無し~3.EXE:2012/10/16(火) 00:54:26.08 ID:i8flTIpJ
%ComSpec% みたいに手軽なのがいいのだが、無理か
962デフォルトの名無しさん:2012/10/17(水) 01:04:14.59 ID:4+L0ArA2
調べたけど無理っぽいね。残念。
963名無し~3.EXE:2012/10/17(水) 17:51:25.50 ID:JkKM6sbY
あほっぽいね。あほか。残念。
964名無し~3.EXE:2012/10/21(日) 07:38:00.20 ID:uHhBhSdy
-Confirm:$falseに対応していないコマンドレットで
確認メッセージを表示させないようにしたいのですが、
方法はないでしょうか
965名無し~3.EXE:2012/10/21(日) 15:29:43.25 ID:Z+oBmG/n
>>964
-Forceで確認でなくなるコマンドレットありますよ
966名無し~3.EXE:2012/10/25(木) 11:52:59.86 ID:+IAHW8We
PSオブジェクトのプロパティについて教えてください

・psbase  ←元となったオブジェクト?
・psobject.ImmediateBaseObject ←アダプタしたオブジェクト?
・psobject.BaseObject ←アダプタしたオブジェクト? ImmediateBaseObjectと何が違うの?
967名無し~3.EXE:2012/11/01(木) 18:08:50.30 ID:uCXjYmpY
968名無し~3.EXE:2012/11/01(木) 18:11:05.48 ID:9C1dzG6y
969優しい名無しさん:2012/12/10(月) 04:23:25.73 ID:r/g+qGG1
独自の運命を取るがゆえに…
970名無し~3.EXE:2012/12/10(月) 09:37:54.58 ID:sWDv6Ofi
   ∧∧
  (  ・ω・)
  _| ⊃/(___
/ └-(____/
 ̄ ̄ ̄ ̄ ̄ ̄ ̄

  <⌒/ヽ-、___
/<_/____/
971名無し~3.EXE:2012/12/10(月) 12:28:48.34 ID:sWDv6Ofi
 ラ ジ オ の D J が 考 え た 
972名無し~3.EXE:2012/12/10(月) 12:30:46.89 ID:sWDv6Ofi
妹を精神病院に入院させる手続きが抜けてた。すまん
973名無し~3.EXE:2012/12/10(月) 15:39:56.69 ID:sWDv6Ofi
  |         |  |( ゚Д゚) 冫、)∧_∧
  |         |  ||  |  ` / ( ・∀・)      / ̄ ̄ ̄  ̄\   
  |         |  | ̄ ̄ ̄ /|_∧⊂      ./////ヘ    \
  |         |  |   / /| ∀`)       | ⌒ ̄⌒ ̄ ̄ヘ   |  / ̄ ̄ ̄ ̄ ̄
  |        /\ |  /|/|/| _-;)       | (・)  (・)   \  | < そこのラジオのDJ逃さないわよ!
  |      /  / |// / /|⊂|        |  へ      9) /   \______   
  |   /  / |_|/|/|/|/| ∪      彡|  ___    |ミ
  |  /  /  |文|/ // /           \ ヘ_/U  ./ヘミ
  |/  /.  _.| ̄|/|/|/               \____/ 
/|\/  / /  |/ /                 /    \ 
  |   | ̄|  | |ヽ/l                  ⊂ (     ( つ 
  |   |  |/| |__|/                    /⌒ _)  
  |   |/|  |/                       { ノヘ    
  |   |  |/                         し  `J Ξ≡3
974名無し~3.EXE:2012/12/11(火) 23:07:04.56 ID:yJcgaIML
ただ単に
ls
とやるとLengthとうファイルサイズを表す列が表示されますが、
ls | Export-Csv a.csv
とやると出力されたa.csvにはLengthという列がありません。
Lengthも出力したい場合はどうすればよいのでしょうか?
975名無し~3.EXE:2012/12/11(火) 23:46:49.57 ID:8B2XcPsK
ls | select-object Name,Length | export-csv a.csv
976名無し~3.EXE:2012/12/12(水) 21:18:55.57 ID:qMSdpiGF
>>975
ありがとうございます。ファイルサイズを出力させることが出来ました。

それにしても↓のようにしてもなぜLengthが出ないんだろう?謎だ…
ls | select-object * | export-csv a.csv
977名無し~3.EXE:2012/12/12(水) 23:43:11.09 ID:KnVwFSTl
>>976
ls の出力にディレクトリがなければ Length が出力されたよ
978:2012/12/23(日) 22:42:27.64 ID:rlbzwsZi
推薦expert
979名無し~3.EXE:2013/01/24(木) 00:33:27.56 ID:gx4GBbSt
PowerShellを使ってGUIツールの自動化テストを行いたいのですが、
参考になるページなどあったら教えてください。
980名無し~3.EXE:2013/01/27(日) 19:29:36.57 ID:jUP9hk9G
diffコマンドを、

diff $(gc "c:\aaa.txt") $(gc "c:\bbb.txt") -inc

のように使っているのですが、行番号が出ないので非常に不便です。
何か書き方が悪いのでしょうか?それとも元々出ない?
行番号を出す方法はあるのでしょうか?
981名無し~3.EXE:2013/01/28(月) 01:31:55.80 ID:llkBPOL7
>>980
やるとすればSelect-Stringで全行ヒットするようなパターンを与えて行番号出すくらいかねぇ
compare (grep ^ a.txt) (grep ^ b.txt)
あと一行コマンドの場合括弧の前の$はいらんよ


この板自動で落ちるのって980からだっけ
982名無し~3.EXE:2013/01/28(月) 20:31:24.91 ID:BAHcnE+Z
>>980
ごめんSelect-Stringの出力にパス情報が入ってるの忘れてた
$a = grep ^ .\a.log | % { $_.Path = ""; $_ }
$b = grep ^ .\b.log | % { $_.Path = ""; $_ }
compare $a $b

みたいな感じでならうまくいくよ
983980:2013/01/29(火) 01:32:57.70 ID:yPH+ac3a
>>982
ありがとう!明日試してみますね。
984980:2013/01/29(火) 23:36:12.56 ID:yPH+ac3a
>>982
今日使ってみましたが、バッチリうまく行きました!
どうもありがとうございます。

ところでこれは文字コードがUNICODEのファイルでやると問題なかったんですが、
SJISのファイルでやると日本語が文字化けしてしまいました。
これはPowerShellの仕様なのでしょうか???
985名無し~3.EXE
-Encoding オプション付けとけ