【最強CUI】PowerShell -Part 1
1 :
デフォルトの名無しさん:
スレなかったので立てました
2GET
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
Part 1ではないようなきがする
1 デフォルトの名無しさん[] 投稿日:2012/03/22 02:42:21
柔軟で強力な機能と体系的な操作体系を両立した次世代シェルPowerShellのスレ
特徴
windowsに標準搭載
オブジェクト指向スクリプト言語を簡潔で少ない命令向けに改良したような文法
自然言語に近い文法
MSDOSやUnix系シェルの命令の代表的なものが使えて移行しやすい
windowsの挙動を簡単なコマンドで制御できる
開発元
http://blogs.msdn.com/b/powershell/
自作GUIシェル作る時に便利だね
ただとにかく実行が遅い
モジュールが強力だよな
特定目的に合わせて拡張できる
13 :
デフォルトの名無しさん:2013/09/15(日) 13:12:39.19
なんか汎用性が無いと使う気になれない。
汎用性とはMacとLinuxでも動くということなんだけと。
じゃあ使うなってこと
なんだかんだでMS漬けな顧客にとっては便利だしな
SUAで万全とは言わんなりに互換持ててるからな
まあcui自体時代遅れ。スマホ世代はコマンドプロンプトの存在知らんからな。
まあ有用なんはもう勝手に移植されるからな。勘違いクズアプリ屋もvse持っててクズアプリ量産してるようだけど、クズはクズ。
Macとか言ってたが、非互換性Winどころじゃないだろに話題に挙げられて逆に可哀想だな。SUSもやめたり初めたり、ポリシーゼロだぜ。ちったあ怒れよ消費者!
宗教じみたマカーじゃないと言われた予防線も貼っとくか。
マニア向けPCに過ぎない携帯屋持ち出す暇で、Linuxの最強シェルとかでっち上げてこね回していればいいじゃないの?
なにパワーシェル最強じゃないの?じゃあ何がいいの?まさかbas…ぷぺぺーwwww
で?ないでしょ。
ながっからしくなったけど、要はあんたただの馬鹿ってこと。
あんたの思う汎用性、来年には無に返してるかもよw
事例は山ほどあるわけで。さすがにここまでつつけば色々思い当たるやろ
長い。アホか
Linuxははやくパワーシェルをパクるべきだ
今時文字列をパイプするなんて笑っちゃうよな
18 :
デフォルトの名無しさん:2013/09/18(水) 21:28:25.75
VBScriptに比べて便利?
文法がわかりにくい。
将来性が不安だ。
コマンドレット?
ファイルオープンの仕方がわからない。
同意
お勧めラッパーとかないの
python、rubyあたりでさっくり書けると嬉しいのだけど
pashが頑張ってくれれば化けるかもしれない
unixを滅ぼしかねないほどに
ラッパーとかなんもわかってねえじゃん・・・
perlやjavascriptみたいにCライクな勘では使えないけど
ちょっと時間とって覚えれば使えるから。
騙されたと思って勉強してみろって
VisualStudio使わずに高機能なGUIをサクサク作れるのがいいね
はようwindows以外でもまともに使えるようになってくれ
sedで文字列を抜き出すような泥臭い作業はもう嫌だお
pashというか、unixのshellってbashとかせいぜいzshあたりが高性能とされてるけど、もっと根本的に作り替えようって動きはなかったのかな
文字列操作のしにくさとかひどいよな
そのうちJavaがパクるだろ
やっぱJavaがいいね
それはない
でもPowerShell使ってるとMSの手のひらのうちだなーって思ったりはする
bashと比べたら全然いいのに、諸々込みで結局お仕事はbashな毎日
職場からマカー消えてくれればいいんだが
ないなら作れ
Javaなら一通り揃ってるから簡単だろう
Javaシェルか
あまり知らんけどJavaランタイム上で動く言語とかあるんだしありかもな
Version 3で起動したスクリプトからVersion 2でスクリプトブロックを実行したいのですがどうすれば出来ますか?
PowerShellの概念は強力だと思う、速度は別として最強でしょ
まあ異論はない
MS以外でも使いたいとか速度こそ究極とか異論がある奴はいると思うけどね
いちいちパイプラインのパースしなくていいからパフォーマンスでも有利な気がするが遅いのか?
フリーソフトがcmd用のコマンドラインを幾つか提供してある場合があるが、
PowerShellは利用できるのか?
扱うファイルはcp932以外だと文字化けしてしまうのか?
対処方法はPowerShellになってからあるのだろうか?
cmdで使えるコマンドはみんな使えるし
使いにくいならラッパーコマンドを書けばいい
>>37 ありがとう。usb外すコマンドライン用のソフトとか
幾つかのフリーソフトを使ってたから助かる。
「文字化け」問題はnkf32が実装で対応できるっぽいね。
長いけどPowerShellによる変換コマンドもあるようだ。
cmdの方がウィンドウズ8.1でもメンテ入ってないような仕上がりだったので
PowerShell学ぶわ。ありがとう。
C#やVBのコードを書いてコンパイル以外にPowerShellからクラスを追加する技術は有りますか?
>>39 こういうことではなく?
Add-Type @"
public class Hoge { public int x; }
"@
$x = New-Object Hoge
違います
「Powershellからクラスを追加」
どこへ追加したいんだ?
Add-Class Hoge {
$mProp = 100
function DoSomething {
param(x)
Write-Host x * $mProp }
}
$o = New-Object Hoge
$o.DoSomething(100)
>>37みたいにラッパーコマンドを書けばいい
とか言ってるけどちょっとだけ追加するとかだと返って一苦労になるんだよね
例えば複雑なバッチファイルにちょっとpowershellのコマンド書きたいとか、できないしね
バッチとかの遺産はそのまま使えないと思った方がいい
ISE みたいにプロンプト等へのコマンド入力や結果出力と
Read-Host とか Write-Host、[Console]::Writeline なんかを分離したければ
自力でホストを書かないと無理なんだろうか。
powershell -Command - でパイプでつないで他プログラムから使おうとしてるんだけど
Read-Host なんかの対応がすっきりしない。
単純に全てがオブジェクトになってるってのがプログラマなら面白がるよね
rubyあたりから手できそうでなかったアプローチだ
5年以上経った今となっては目新しくもなんともないけどw
勝手に独自のwebclientコンポーネントを
curlとかwgetとか名付けてるのはあかんわ
あかんとこもけっこうある
文法がもうちょい C# (っていうか C っぽいの)を受け付けてたらプログラマ受け良かったんだろなと思う。
webページにPOSTしてゴニョゴニョするスクリプトを
すぐに書けたはいいんだが.netやってる人はお馴染みの
サーバーによってプロトコル違反が発生しました.
エラーが出て困った
結局powershell.exe.configなんてのを作るはめに・・・これはダサい
Out-File -FilePath "Test.txt" -InputObject "test"
かっこよすぎワロタ
powershellを起動させると他のEXCELなどのアプリと同じようにタスクバーにアイコンが表示されますが
起動させたpowershellから何らかのコマンドを実行してこのアイコンを点滅させることはできますか?
つまりpowershellが他のウインドウの下に隠れている場合などでもユーザーに気づかせたいのです。
具体的にはps1ファイルを実行して処理が完了したら、ps1ファイルを実行しているpowershellの
タスクバー上のアイコンを点滅させたいのです。
53 :
デフォルトの名無しさん:2014/01/25(土) 19:35:16.09
PowerShell の言語仕様見てたら普通にプログラミング出来そうと思ったけどそのままだと遅いんだよね。
どれくらい遅いかと言うと最弱レベルだった。
測定は時刻を取って秒が変動するまでの while のループ回数を取った。
Lua(数値)だけは CPU時間なんだけど時刻を数値で取る方法が分からなくて。
速い >>>> 遅い
C# on PowerShell > Lua(数値) > HSP3.31 = JavaScript > Lua(文字) > VBScript >> AutoIt3 = AHK >> UWSC >> PowerShell >> DOSコマンド
測定環境は Core i3 物理2コア Windows 8.1
i++ inc(i)
PS4-C# 4145566 4088694
Lua CPU 1012841 836647
HSP3.31 915425 591546
JS chrom 777203 736391
JS fx 647385
VBScript 539979 340808
Lua文字 525671 473907
AHK Sec 188555 104679
AutoIt3 220890 82255
AHK Now 89020 71513
UWSC 23629 9137
PS4 4194 2108
.bat 471
まああくまでバッチ処理レベルだしねえ。期待されてるのは。
なんでも出来る感じもするけどそれって結局 .NET がすごいからであって
55 :
デフォルトの名無しさん:2014/01/25(土) 21:49:57.99
ゴミ
>>53 >時刻を取って秒が変動するまで
よく意味がわからない…
>>52 うわピカピカ光った!
どうもありがとう〜!
でもこれって引数とか沢山あるけど、もう単純に「呼ばれた瞬間に3回点滅!」みたいにして
短く出来ないかな?
いま仕事してる現場で使いたいんだけど、ネット出来ない環境だしUSBメモリとかも使用禁止だから
このスクリプト印刷して持っていって自分で打ち込むしかないんだけど
コメント部分除外してもスクリプトが長いから、打ち込むの遅い自分にはつらい…
書き換えようとトライしたけど自分には高度過ぎて無理だった…
多分加算命令数/秒ってことでしょ?
ループの1処理ごとに時間取って比較してるのかねえ。
だとすると加算処理の速度比較っていうよりシステムコールの速度比較みたいなもんだな。
あと選別した言語に HSP とかなんで入ってるんだ?
Java とか ruby とか python はどこいったんだ。
60 :
57:2014/01/26(日) 11:36:54.99
>>59 時間のかかる処理をするps1ファイルの先頭にこれ入れて、最終行を「Invoke-FlashWindow」にしたら
処理完了時にバッチリ光りました!
せっかく書いてもらったので絶対打ち込みます!(・`ω´・)
ありがとうございました!
PowerShellもそこそこ補完できるようになって来たけど、C#のコードはさすがに無理だからなー
Roslynが完成すればTabExpansionからIntelliSense呼び出すとかできるかもしれんが
>>58 > Java とか ruby とか python はどこいったんだ。
使ってないし使う予定もないからだけど、そこらへんは普通にググったら出てくるだろ。
基本的に UWSC(スクリプト)との比較目的でやり始めたから
キーボード、マウス操作できる AutoIt や AHK が入ってて
日本語でできる HSP が入ってる。
HSP は以前、使ってもないのにこき下ろしたことがあるけど実際どうだろうと思ってね。
VBScript や JavaScript はメジャースクリプト言語の代表として比較対象に選んだ。
UWSC があんまり遅いんでもっと遅いのはあるのかなってことで DOS コマンドでやってみてその後継の PowerShell もやってみたってわけ。
ttp://anago.2ch.net/test/read.cgi/software/1389240960/49+74 > 49 速い HSP3.31 = JavaScript (chrom) > VBScript >> AutoIt3 > AHK >> UWSC 遅い
> 74 速い Lua(数値) > HSP3.31 = JavaScript (chrom) > Lua(文字) > VBScript >> AutoIt3 > AHK >> UWSC >>>> DOSコマンド 遅い
それにPowerShellを加えたのが
>>53 ちょっと変更があったのは時刻の取得が不公平な部分があったのを修正したから。
>>58 ttp://www.infoq.com/jp/news/2009/04/top-scripting-languages-php-ruby >PHP >> Perl >> Python > Flex > Actionscript > Ruby > Javascript > Powershell > F# >> VBScript
これを見ると、PowerShell は F#.net より高速だし、 VBScript よりはるかに高速と言うことになっているけど、どうなんだろうね。
PowerShell の時刻取得はコマンドレットだから呼び出しに時間がかかって当然なんだけど、
コマンドレットを使わなければC#に頼らなくても
>>53 の中では最速ってことなんだろうか。
確かに別プロセスを立ち上げて時刻取得したら遅いだろうけど、
DOSでの時刻取得は環境変数を使ってあの速度だったから、シェルスクリプトは遅いんだろうと思って気にしてなかった。
円周率何万桁とかの時間を計測した方が正確なんだろうけど
時刻が秒単位でしか取れない処理系だと端数が出るんで不公平かなと。
あと、めんどくさいし。
よく知らない言語を調べながらやるのはめんどくさいし、スクリプトは最適化されないから自分で最適コーディングしないといけないし。
ループで使ってる時刻取得方法(速度順)
C# on PS sec = DateTime.Now.Second;
Lua(数値) sec = math.floor(os.clock ())
HSP3 val = gettime(6)
Lua(文字) sec = os.date("%S")
JavaScript sec = new Date().getSeconds();
VBScript val = Now
AutoIt3 $SEC = @SEC
AutoHotKey sec = %A_Sec%
UWSC t = GetTime()
PowerShell [int]$sec = (get-date).Second
DOS sec = %time:~6,2%
どうせやるなら100万回ループするのに何msec掛かるかを図った方が変なロスはないと思うよ
折角Measure-Commandで時間測れるんだし
66 :
デフォルトの名無しさん:2014/01/27(月) 18:58:09.07
何が言いたいのかよくわからんなあ
それでpowershellはダメだと言いたいわけ?
普通にプログラミング言語っぽいしプログラム板にスレ立ってるけど
速度は遅いから重い処理を記述するのには向かないということを
自殺ベンチ
もとい、自死ベンチ
あれ?
自作ベンチ結果を披露しているわけだが
それでは不満か。
そう言えばバッチファイルのスレもこの板だったか。
記号だらけでWebだと検索しにくいんでお世話になってる。
自分で遅いというのは確認したけど
C#のコードで高速化もできるし自分の用途の範囲で問題ないと思っているんで
今ちょっと PowerShell を勉強中だから
全然ダメじゃない帝人。
長々と書いたのを「そんなこと言ってない」の一言に置換しようかと思ったけど気にせず投稿
いや、はじめからそういう環境だってわかってみんな使ってるとおもうんだが・・・
シェルでループの速度を測る意味が分からない
サーバや、他人のPCでちょいと作業をするときにこそ役立つ。
自分の開発PCだったら、他にもっといいツールがあるし。
そんなわけで、早く Ver3以上 が標準の世の中になってほしい。
俺は別にV2(=Win7標準環境)でもいいと思ってる
V1でもそこまで困らんけど、プリインスト機がまずないし
ちゅうか、なんだかんだでPowerShellって言語の更新サイクル早いね
Windows依存の功罪というかなんというか
GUIアプリが作れるようになるといいんだけど
現状でも別に作れないことはないっしょ。Windows Form 使えるんだし。
WPFでもかけるというかむしろそっちのが相性いいからちょっとした社内ツールなら楽に作れる
もっとも普通は VS Express あたり落としてきて
GUI エディタでぽんぽんぽーんって作ったほうが早い気もするが
ぽぽぽぽーん♪
を思い出した。
gci "C:\hoge.txt" | select-string "abc"
でテキストファイルの内容検索すると結果が「ファイル名:行番号:内容」という形式で表示されますが
行番号と内容だけ表示することって出来ないのでしょうか?
オブジェクトをパイプでつなげてselect linenumberみたいに欲しいプロパティを指定する
オブジェクトにどんなプロパティがあるかはget-propertyで調べられるよ
ごめんget-memberだった
>>76 PowerShell Studio使えばPowerShellでWinformのポトペタはできるよ
他Admin Script Editorにもあったと思うけど、使ったことないから知らん
>>78 デフォルトでMatchInfo型をそういう表示にしたいなら、
↓こんな感じの*.format.ps1xmlを作成して Update-FormatData -PrependPath .\hoge.format.ps1xml とか。
<?xml version="1.0" encoding="utf-8" ?>
<Configuration>
<ViewDefinitions>
<View>
<Name>MatchInfo</Name>
<ViewSelectedBy>
<TypeName>Microsoft.PowerShell.Commands.MatchInfo</TypeName>
</ViewSelectedBy>
<CustomControl>
<CustomEntries>
<CustomEntry>
<CustomItem>
<ExpressionBinding>
<ScriptBlock>"{0}:{1}" -f $_.FileName, $_.Line</ScriptBlock>
</ExpressionBinding>
</CustomItem>
</CustomEntry>
</CustomEntries>
</CustomControl>
</View>
</ViewDefinitions>
</Configuration>
82 :
78:2014/02/08(土) 23:48:58.04
>>79 gci "C:\hoge.txt" | select-string "abc" | select linenumber,line
でいけました。ありがとう!
>>81 PSビギナーの自分にはハードル高すぎました。すみません…
86 :
デフォルトの名無しさん:2014/02/21(金) 23:25:51.56
>>83 俺の場合は、VS Expressで画面作って
そのXAMLファイルを[string]get-contentで読み込む関数つくってる
(頭のclass文だけは削除するようにしてる)。
だから、ぺたぺた貼って、PowerShellでメニュー画面作り。
その仕組みは20分くらいで作っちゃったよ。
普通に VS Express で完結しちゃったほうが早くね?
88 :
デフォルトの名無しさん:2014/02/22(土) 11:35:52.82
>>87 いちいちコピペするの面倒じゃん。
VS ExoressでPowerShell作成環境ないから完結しないし。
いや powershell 使わんで C# あたりで完結しちゃったほうが早くないかねと。
90 :
デフォルトの名無しさん:2014/02/22(土) 11:43:51.49
そりゃものにより。
Roslyn完成したらISEにC#環境とGUIデザイナ組込みーみたいなのはそのうち出るだろう
92 :
デフォルトの名無しさん:2014/02/22(土) 12:31:05.56
Roslynでてくると
その次は、それを利用したもっと新たなステップの
スクリプトが出てきそう。
ヘルスバーグはいつも楽しませてくれる。
とはいえ、まだ先の先だけど
そもそも拡張メソッドに対応してないんだから、クエリ式なんて使えるわけないじゃないですかー
Roslynが完成すれば、Invoke-C#みたいなの作って、
部分的にC#コードでLINQクエリ実行する、みたいなことはできるかもね
会社で他の人が書いたPowerShellのソースを見てて
「If($? -eq $false)」っていう記述があったんだけど、この「$?」って何なのでしょうか?
>>95 help automatic_variables
> $?
> 最後の演算の実行状態を格納します。最後の演算が成功した場合は TRUE、失敗した場合は
> FALSE を格納します。
UNIX のシェル由来だね。と言いたい所なんだけど $$ とか全然違うしなあ。
unixとかawkとか、既存のツールから由来してる機能は多いよ
beginやendのブロックとか
パイプライン指向だか何だか知らんが、
functionにおけるreturnの扱いにくさだけは何とかしてくれんかな。
外部コマンド(Cmdletではない)実行する度に、それらの出力をnullやら他に逃さないと、
returnが汚れるのが激しくめんどくさい。
100 :
デフォルトの名無しさん:2014/03/01(土) 13:20:31.29
>>99 ん?
具体的なところがよくわからないんだけど
どんな感じのことを言っている?
function Out () {
"hoge"
return $true
}
102 :
デフォルトの名無しさん:2014/03/01(土) 13:53:41.97
その例の場合だと、書き方としては
function Out () {
"hoge"
}
となるんだけど。
103 :
デフォルトの名無しさん:2014/03/01(土) 13:58:52.35
関数内で変数を使って
かえしたれば
function Out () {
$a="hoge"
$a
}
または
function Out () {
$a="hoge"
return $a
}
returnのところは
return($a) でもいい
104 :
デフォルトの名無しさん:2014/03/01(土) 14:17:36.86
>>101 要はこの例でいえば
自分で2つ返す(hogeとtrue)コーディングをしているので
余分と思われるものがでてる。
例えば SetSomething みたいな値をどっかに設定するのとか
DisplaySomething みたいな値をどっかに表示するのみたいなので成功したか失敗したかを返すような、
どっちかというと所謂副作用部分がメインの関数があったとして、
それをそのまま呼び出すと戻り値要らないのに一連の戻り値に入っちゃうのがうっとおしいって話じゃね。
C なんかでいうところだと printf の戻り値なんか普通ほったらかすのにいちいち (void) でキャストしたり
適当な変数に代入して読み捨てしないと戻り値に入っちゃうみたいな感じね。
まあそういう言語なんだって言われたらそれまでの話なんだけど。
自分ではっきり出力してればいいけど
普段何も返さないコマンドがエラーメッセージとか返して来たら困るね。
>>102-104 ごめん。
そもそもの言い方が悪かったけど、
functionを、他言語の”関数”と同じように、呼び出し側からはreturnだけを受け取りたいってこと。
関数内で変数を使って
かえしたれば
function Out () {
$a="hoge"
$a
}
でやっていることは、$aに代入することによって、パイプラインに流れるのを阻止した状態。
これを、外部コマンドに対して行う場合は、
$a = $(外部コマンド)
[void]$(外部コマンド)
外部コマンド | Out-Null
などなど。
>>106 その通りでございます。
明示してないものまで戻り値に含まれるってのは他の言語と比較すると特異ではあるわな
c#のoutがあればね。
refはあるんだが。
110 :
デフォルトの名無しさん:2014/03/01(土) 14:43:03.21
111 :
デフォルトの名無しさん:2014/03/01(土) 14:50:34.97
>>108 return文に指定していないものまでという意味ですか。
>>111 そういうこと
明示しない場合は最後の式の値が戻り値になる、なんてのは結構あるけど
頭から最後までの式の結果を連結して返されるってのは「関数の戻り値」って考えると見たこと無い。
戻り値じゃなく出力って考えるとパイプラインのことと相成ってスッキリするんだけどね。
113 :
デフォルトの名無しさん:2014/03/01(土) 16:40:40.92
>>112 なるほど。
出力ということですね。
returnは、関数内でステートメント終了!の意味なんだろうな。
ってことは、常にreturn値だけをとりたいときは、安心のために。
$a=Out
$a.[$a.Count-1]
てな感じになるのかな。
114 :
デフォルトの名無しさん:2014/03/01(土) 17:42:47.70
おっと
$a=out
$a[-1]
でよかった。
115 :
デフォルトの名無しさん:2014/03/01(土) 18:46:25.77
それぞれ、悩む点が異なるので
いろいろ勉強になるな〜
>>101 例に突っ込んでもしょうがないかもしれんが
文字列を直接埋め込んで何もしないって状況がありえなくね
echo hoge ならともかく
$a = New-Object Collections.ArrayList
$a.Add(100)
return $a
とかなら分かるけど
117 :
デフォルトの名無しさん:2014/03/02(日) 17:14:32.59
>>116 おれもよくわからないんだけど。
無いんじゃないかな。
あるいは途中でのチェックのために入れたいとか。
だとすると、他の書き方をするべきなんだけど。
ともかく
他の言語だったらエラーで、そういう記述ができないんじゃないかな。
他の言語の関数だと、明示的に出力指定すると戻り値としてでなく、
コンソール出力等に返され、戻り値には入らない。
それを言っているんだと思う。
PowerShellで他言語と同じように使用したいなら、
他言語と同じような使用方法を守れば問題ないんだと思う。
たとえば、ファイル一覧をほしくて関数としてdirを使うなら。
function Out{
$dir = dir
Write-Host $dir
return $ture
}
$kekka=Out
とすれば戻り値の結果$kekkaには余分なものは入らない。
要は、PowerShellは融通が利いちゃうんで戸惑ってる
ってころじゃないのかな?
他の言語でできないことができちゃうってことでしょ。
118 :
デフォルトの名無しさん:2014/03/02(日) 17:16:35.00
捕捉だけど
>無いんじゃないかな
PowerShellの場合だと、それをわざと利用することはあるが、
他言語ではそういう使い方できないだろうという意味。
119 :
デフォルトの名無しさん:2014/03/02(日) 17:22:32.45
質問からの例でいえば(
>>101 の例でいえば )
本来は
function Out () {
Write-Host"hoge"
return $true
}
と記述する必要があるということでしょ。
外部関数を中で使うなら
function Out () {
$a=外部関数()
Write-Host $a
return $true
}
ってな感じですね。
実際、私はそういう記述してる。
なんか画面出力の話にすり替わってるけど戻り値の話でしょ?
>>99 が元ネタなんだから。
上でも上げたけど、C言語でいうところの printf みたいな
副作用がメインで戻り値はおまけで大抵は捨てるような関数を powershell で同じ感覚で使おうとすると
戻り値に混ざってきてなんじゃこらってなるって話じゃないのか?
いちいち [void] でキャストして捨てますよーって明示しなくちゃいけなくてめんどくさいと。
int main() { printf("hello\n"); return 0; }
の戻り値が { 6, 0 } になるようなもんだ。
>>101 の例でいくと、他の言語では、例えば C でも C# でもなんでもいいけど
"hoge" は定数を置いただけだからなんも起きないし戻り値にも含まれない。コンパイルする時の最適化で消されるだけ。
でも powershell の場合は function の中で書いた式の戻り値全部を連結して返す仕様になってるから
("hoge", $true ) が戻り値になる。他の言語経由してる人なら return $true って書いてあったら
$true しか返ってこないって普通考えちゃうよ。
>>119 だから、その書き方とかキャストや、あるいは戻り値を参照渡しする、とかがめんどくさいんでしょ。
うわ、かぶったw
123 :
デフォルトの名無しさん:2014/03/02(日) 19:42:56.62
>>120 そっか勉強不足だった。
Cは使わないけど。ってことは、コーディング上では、
int main() { "hoge";printf("hello\n"); return 0; }
と書いても、コンパイラーでhogeは無視してくれるのか。しらんかった。
エラーかと思ってた。
出したいときは別途記述が面倒かもしれないけど。
画面といったのは"hoge"も別途必要としたから記述したのだと理解した
関係。
powershell でいうところの (関数)[-1] って呼び出しが他の言語の一般的な関数呼び出し、って言えば何の話なのかわかってもらえるんじゃね。
125 :
デフォルトの名無しさん:2014/03/02(日) 20:01:18.83
まあ、そういう仕様としかいえないよな。
俺の場合だと、XAMLを関数内で組み立てるときにPoowerShellの関数
使用は重宝してる。
普通の言語だと、逆にくっつける操作が必要になるので煩雑になっちゃう。
return文自体使わないけど。
使う場面次第だな。
パイプラインで出力をつないでいく設計思想だからねえ。
127 :
デフォルトの名無しさん:2014/03/02(日) 20:16:15.40
関数自体から返るものすべてがオブジェクトだと
認識しないといけないね。
成否を返す関数との相性は悪いよな
あと複数結果返す関数でいえば結果が一個の時と複数の時でタイプが変わるのが気持ち悪かったわ
$x = ls とかやったときにファイルが複数あると $x.GetType() => Array だけど
一個しか無いと $x.GetType() => DirectoryInfo ときたもんだ
@()で呼び出しゃいいんだけど
あくまでシェルであって言語としてはかなり歪だと思う
130 :
デフォルトの名無しさん:2014/03/02(日) 20:29:09.68
>>129 そりゃ旧来のシェルのほとんどは単なる文字列操作にすぎないからね。
いや、言語としてはいいと思う。
が、シェルだと考えると、
.NETやコマンドレットだけじゃなく、外のコマンド・プログラムをたくさん使うことになるわけなので、
それらの戻りを全部把握して処理しないといけないのは、結構大変なことだと思う。
嵌って、「パイプラインすげー」と思う人、「なんだこれ、使えねーw」と思う人それぞれ。
132 :
デフォルトの名無しさん:2014/03/02(日) 20:33:12.58
>>128 初めは俺も思った。
なれたらこの方が便利だけど。
returnの役割は、スコープ終了と、リターンコードを返すための利用。てな感じ
なんだろな。
結果とリターンコード両方が取れるのは、俺にとっては便利。
>>120 いや俺が
>>116で言ったのは、文字列だけ書いたらそれが画面に表示されるってのはPowerShellくらいだから(ないことはないだろうけど)
他の言語の感覚で文字列だけ書いてたら出力に混じって嫌だって例文は違和感があるって話
printfの感覚で echo hoge って書いたら出力に混じるから困惑したってことなら分かるけどって意味
だから出力が混じって困る例なら、たとえばC#で戻り値があることを意識してないメソッドを呼ぶような例がいいんじゃないか、ってんで
>>116で書いた
確かに最終版はともかくデバッグ中は文字列埋め込むこともあるかもしれないけどね
なんか出力と戻り値を取り違えてる奴がいるからややこしくなったんだろな。
あと例もよくなかった。
単に戻り値を返す適当な処理を書いとけば出力がどうのって話にならなかったんだと思う。
本買って読めとまでは言わんけど、man about_Returnにすら書いてあることくらいは読もうぜってことで
【メモ】
write-output write-hostの違い。
ググって出てくるのは、色が付けられるとか、空行がどうのとか、そういうことばかり。
write-output "foo"
echo "foo"
"foo"
は全部同じで、パイプラインに出力。
write-host "bar" | gm
(エラー)
つまり、write-hostは、コンソールへの直接出力(パイプライン経由ではない)。
コンソールっていうかホストプログラム全般な
画面へ出力することを前提としているから色を指定できる
あとSnover泣いちゃうからまずヘルプ読んであげて
win8.1でヘルプが入ってなかったから、update-helpしたわけだが、英語版しか入らなかった('A`)
139 :
デフォルトの名無しさん:2014/03/06(木) 23:40:23.45
英語を勉強するチャンス!
>>138 これは実績もあるイルカに期待するしかないかw
>>138 「Windows PowerShell 実践システム管理ガイド」
2009初版、という本によると、
C:\Windows\System32\WindowsPowerShell\v1.0 に、
ja-JP というフォルダを作って、そこに
en-US フォルダにあるすべてのファイルをコピーする
と書いてある
漏れはWin8だけど、ja-JP フォルダの中には、
すでに数個のファイルが存在している
どうすべきかな?誰か試しにやってみて
ja-JP フォルダの中の default.helpには、
オンラインヘルプのアドレスが書いてある
7だと最初から入ってたよね。
だから、2008R2でも特になにもしなくてもリファレンスは使えてた。
2012R2だと、どうなんだろ。
サーバの場合、インターネットに直接繋げないケースも多いわけで。
WSUSではたぶん面倒見てくれないから、SCCMとか使うのかね。
143 :
141:2014/03/08(土) 15:49:20.02
漏れはWin8だけど、
C:\Windows\System32\WindowsPowerShell\v1.0 中の、
en-US フォルダの中には、powershell.exe.mui
というファイルが一つあるだけ
これを、ja-JP フォルダにコピーすれば良いのか?
ただし、ja-JPにもすでに、同名のファイルがある
同名のファイルだが、ファイルのサイズは違う
前者は11KBで、後者は9KB
このファイルは何だろう?
ヘルプファイルをダウンロードするプログラムか何か?
144 :
141:2014/03/08(土) 16:26:47.96
powershell と同じフォルダにある、
デバッグ用のpowershell_ise の方が使いやすい
右のコマンド一覧から、
コマンド + オプションを選んで実行できる
最近のISEはコマンド一覧とかついてるんか
真面目な話、
・Windows Server のユーザーである
・管理系のスクリプトを作りたい
・先の見えてる .bat や .vbs よりかは将来性がある
しかし、これらを全て満たす状況じゃないと「憶えても無駄」な嫌な匂いがプンプンしてくる、という感想を抱く。
PowerShell 推しな記事がこぞって 4〜5年前だったりするし。記事が古いから役に立たないし。
でもこれからの Windows Server 管理(特に MS 製サーバーアプリ)には必須、みたいな匂いもプンプンしてくる。
管理者系の人間が嫌々使ってる、というイメージなんだけど、実際はどうなの?
そんなところじゃないの?
開発案件だったらわざわざこれを選ぶ人はいないだろうし
batは低機能過ぎるし、vbsは糞言語のうえシェルじゃないし。
149 :
146:2014/03/27(木) 18:33:56.87 ID:w9DVguFT
>>147 だよねぇ…
泣きながら学ぶことにするよ…
>>148 ええと、シェルとしての PowerShell については何も言ってないのだが…。
VBScript は言語としてはそんなに悪い言語じゃないと思ってる。
ちょっと凝ったことをやろうとすると COMオブジェクトに頼るしかなくて、おもくそ環境依存、意地になって自前実装するとウルトラ遅くなる駄目な子、というとこなら同意。
シグナルのハンドリングというところまで極めてはいないのでそこは了承願いたい。
エラーを raise できるのは知ってるが、はて SIGKIL とか SIGHUP とかを外部から受け取った時はどうだったっけ、な感じなんで。
ム板で言ってもしょうがないが、そもそも開発案件で候補に挙がるような言語じゃないだろう
シェルスクリプト/ツールとして使う分には普通に便利に使ってるけど
これがそうでもない。
プロト的につかったり
メニュー画面がらみ案件に使ったり
相当使える。
そんなのVSでポトペタの方が早いじゃないですかやだー
153 :
デフォルトの名無しさん:2014/03/30(日) 12:03:12.26 ID:1u4x9v7e
>>152 画面はVSでポトペタをそのまま使える
PowerShellでホストする。
めちゃくちゃ簡単になる。
>>152 それ、VSの立場が理解できてないんだとおもうぞ
納品用のPCに泣きながらVSをインストールする
>>152を目撃したという未確認情報が入りました
156 :
デフォルトの名無しさん:2014/03/30(日) 15:51:48.19 ID:RDnNVplQ
>>152 たとえばWPFなら、VSで作る画面(XAML)をC#で使えるよね
これはC#用に作っているわけじゃなく、XAMLとして作られている。
独立したものなんです。これがコードビハインドという考え方。
だから同じものをVBでも使えるよね。
同じようにPowerShellでも使えるんです。
イメージわかってくれたかな?
知っているかもしれないけど、ついでなんで、
バインドという考え有るよね。
これを組み合わせるとJavaなどと比べて何倍も高い開発効率を
生めるのが、現在の.NETの世界となってきている。
なんで、Javaやめて戻ってきた次第。
>>153 すいませんが、アホの俺にもわかるように教えて下さい。
Powershellでホストするって?
xamlでUI作ったらPowerShellから読み込んでShowDialog()で呼び出すってだけじゃ?
$arr=ls
$arr.Name
$arr.fullname
Nameでファイル名、fullnameでフルパスを取り出すのは便利
ただし、入力補完ではこれらの候補が出ない
161 :
デフォルトの名無しさん:2014/03/31(月) 09:16:41.02 ID:ObzhI129
>>160 そもそも ls.Nameってあったけ?
162 :
デフォルトの名無しさん:2014/03/31(月) 13:34:02.17 ID:FswzEzL9
>>160 ls -Nameの間違いかな?
$arr=ls
$arr -Name
としたいということだとすると、無理じゃないかな
new-alias arr ls
arr -Name
ならいけるけど
>>156 データバインドって、Angularのやってるアレ?
スクリプトならnashornで書く方が速いんじゃないの
164 :
デフォルトの名無しさん:2014/03/31(月) 13:56:19.72 ID:FswzEzL9
>>163 そういうのは好きなのえらべばいいんじゃないかな。
いきなり他の言語を使えって言われても、コンテキストを思い出せないんだよ
Excel VBAがExcel JScriptに置き換わったら、いよいよだと思うね
powershell の意味不明な文法はどこ由来なんだろう
いちいちselectしなくても良くなったってことか
それは助かる
169 :
デフォルトの名無しさん:2014/03/31(月) 21:39:20.66 ID:FlSL2ost
>>167 それなら、書き方が違うと思うぞ
$arr=ls
$arr.Name
はできないでしょ
$arr=(ls)
$arr.Name
なら可能だけど、
それでも
入力補完はしてくれないね。
>>169 いやどちらでも通るよ?
入力補完はそりゃ利かないだろうけど
171 :
デフォルトの名無しさん:2014/04/01(火) 00:13:09.13 ID:n+62zDt+
>>167 意外だ。3まではできなかったのか。
powershellの()とか$()ってオブジェクトがそのまま却ってくると理解してて、その書き方が当たり前と思ってたわ。
173 :
160:2014/04/02(水) 02:37:09.60 ID:iqksnACc
$arr=ls
$arr.Name
$arr.DirectoryName
$arr.FullName
Nameでファイル名、DirectoryNameでフォルダまでのフルパス、
FullNameで、ファイル名付きフルパスを取り出す
入力補完は、
$arr. で配列のメンバが、
$arr[0]. で配列中のファイル情報のメンバが表示される
ps初心者におすすめの書籍やサイトありませんか?
powershell in actionのセカンドエディションが何故出ないんだろう・・・
英語読めんから、日本語版でてもらいたいんだけど
176 :
デフォルトの名無しさん:2014/04/02(水) 15:40:49.84 ID:mZJZP6QO
powershellって、本は少ないよな
というか、読んだことない
日本語の情報も少ない
powershellはバージョンアップで結構大きく変わってるから、ネットの情報も古いのはあまり役に立たない
選ばれし者のみが使うものだから安っぽい一般書籍で下々の者の目に触れさせてはならぬのだ
>>177 ないことはないが
wshの本だって読んだことないだろ?
歯を磨くのに歯ブラシの本なんか読まないって奴だな
181 :
デフォルトの名無しさん:2014/04/02(水) 21:07:06.51 ID:y1aMAgcN
そういえば、Excelの本も読んだことないな
bashの本は結構ある
ファイル名に入っているすべての空白を、
アンダーバーに置換して、
置換したときのみ、ファイル名を変更する
#複数か所を置換。日本語もOK
$a=$str.Replace(' ','_')
#True, False
#もし、置換されていれば
if(! $a.Equals($str)){ren}
Replaceが置換できたかどうかが分からないため、
Equalsで置換前後の文字列を比べているんですが、これでいい?
Replaceが置換した文字数でも返せば、便利なのに
これが最近になってerrorになるんだが。エラーメッセージは今手元に処理系がないから晒せない。すまぬ。
$ie = new-object -com InternetExplorer.Application
$ie = new-object -com InternetExplorer.Application
Win8で、動くよ
ただし、このままでは見えないから、
$ie.Visible=$true で見える
それから、$ie.Quit() で終了して、
Remove-Variable ie で変数を完全に削除する
>>186 ので Vista (ってかWin2008srv) と IE9だと、今ちゃんとIE起動したなあ。
echoや>の出力がUTF-16LEなのはハマるな
もともとUTF-8で出力するプログラムとかなんかおかしくなるし
そもそも自分でエンコーディング指定しない状態でうまくいくと思うのがおかしくね
193 :
デフォルトの名無しさん:2014/05/17(土) 13:01:56.04 ID:zPk4Oowy
194 :
デフォルトの名無しさん:2014/05/17(土) 13:04:18.77 ID:zPk4Oowy
>>191 そもそも自分でエンコーディング指定しない状態でうまくbatは
そのまま実行できた方が便利じゃね
おかしくねってなんだよこのカス
お前のせいでこのスレ過疎ってんじゃねえかよ
俺は苦労なく適応してるスタイリッシュ糞野郎は死ねよ
195 :
デフォルトの名無しさん:2014/05/17(土) 13:05:13.85 ID:zPk4Oowy
>>191 そもそも自分でエンコーディング指定しない状態でうまくbatも
そのまま実行できた方が便利じゃね
>>192 それがめんどいって言ってるんだけど
だからこのスレ過疎ってんだけど
196 :
デフォルトの名無しさん:2014/05/17(土) 13:06:51.90 ID:zPk4Oowy
>>192 ドヤ顔1行レススタイリッシュでああかっこいい
これでもうまく出来ない
たとばestcmdのことだよ
やってみろごみ
197 :
デフォルトの名無しさん:2014/05/17(土) 13:09:30.55 ID:zPk4Oowy
そもそも自分でエンコーディング指定しない状態でうまくCUIコマンドは
そのまま実行できる方が便利とおもわないほうがおかしくね
198 :
デフォルトの名無しさん:2014/05/17(土) 13:10:47.73 ID:6QUaAdwh
そもそも自分でエンコーディング指定しない状態で動いてるCUIコマンドは
そのまま実行できた方が便利とおもわないほうがおかしくね
199 :
デフォルトの名無しさん:2014/05/17(土) 13:21:35.98 ID:6QUaAdwh
>>192 設定してもestcmdがうまく変換できない
試してみなくても絶対できると思うこむのがおかしくね
200 :
デフォルトの名無しさん:2014/05/17(土) 21:10:33.02 ID:blVZ2esz
こちらの質問を投稿されてから少し時間が経ちましたが、その後の状況はいかがでしょうか
とか気持ち悪いからまれ方する掲示板には絶対に書き込みしないが
ここでカスどもを叩きつぶんつ
201 :
デフォルトの名無しさん:2014/05/17(土) 21:25:14.42 ID:blVZ2esz
単純にエンコード指定しただけではうまくいかないことがあるのは明白
試しもしないで大嘘書いてんじゃねえよクズ
202 :
デフォルトの名無しさん:2014/05/17(土) 23:03:47.67 ID:blVZ2esz
こちらの質問を投稿されてから少し時間が経ちましたが、その後の状況はいかがでしょうか
とかいう気持ち悪いからまれ方する掲示板から出てくんな
203 :
デフォルトの名無しさん:2014/05/21(水) 01:04:44.83 ID:sYItXBaD
utf8を出力するコマンドを扱うのは厄介で
普通に実行すると、utf8がsjisに文字化けした文字列が出力され、
これを > しようもんならさらにutf-16leでエンコードされて涙目になる。
> そもそも自分でエンコーディング指定しない状態でうまくいくと思うのがおかしくね
なんていう話ではない
>>191>>192 これ(utf8がsjisに文字化けした出力)をファイルに落として(sjisでエンコード指定(Default))
Get-Contentで読み込む(utf-8でエンコード指定)と
文字コードはあってるのにバイトが欠けたような化け方をして元のコードには戻らない。
cmd.exeのutf-8→sjisの変換(iconvとかnkf)ではそんなバイト欠けしないので
暗黙の多重エンコードのせいでバグのような挙動になってるのだろう。
get-content でutf8なファイルを-Encoding utf8指定して読み込むとすべてうまくいくので
コマンドにもutf8でエンコードで指定できればうまくいきそうではある。
でもコマンドにはエンコード指定ができないのだ。
これはcmd.exeと一緒なので普通なんだけど。
cmd.exeでutf8を扱うのはXPからの悲願だったわけで
sjisに化けた文字をどうこうするよりやはり生のutf-8を出力してもらうのが最善であろう
Diagnostics.ProcessStartInfoのStandardOutputEncodingを設定すれば
ナマのutf-8を吐いてくれる。
つまり、Diagnostics.ProcessStartInfo の設定してとあるutf-8出力コマンドに
引数を渡すラッパをpowershellスクリプトで書けばいい
手間といえば手間だが
cmd.exeでutf8を扱うのはXPからの悲願だったわけで
必要な手間だといえる
標準出力のutf16leとsjisは自動判別されるがutf8は判別しない。
utf8での出力は問答無用でsjis出力される。$OutputEncoding は関係しないようだ。
.netのDiagnostics.ProcessStartInfoの StandardOutputEncodingをutf8に指定して
プロセスを作成すれば、化けずにutf8で表示できる。
utf8のファイルならば自動判別される。
Get-Contentで文字コードを指定しなくてもutf8のファイルを読み込めるし
> をしたら、化けずに正常にutf16leに変換される。
UTF8の標準出力は無視というより
単純にBOMBなしUTF8はスルーされるってだけの話なのか
BOMBなしUTF8は-encoding utf8すれば読めるが強制sjis変換される
BOMBがないutf8はちゃんと表示された
×BOMBがないutf8はちゃんと表示された
◯BOMBありのutf8はちゃんと表示された
>>203 俺が言ったのは、エンコーディング指定なしで望みの形に自動で入出力される、なんて都合のいいもんのはずないだろってことだけだが
特にUTF-8が厄介なのはcmd.exeの頃からそうなんだから
テキストはバイト列じゃなくて文字列として扱われる
PHPとかPtyhon2とかしか知らないと、間違う
209 :
デフォルトの名無しさん:2014/05/30(金) 23:45:52.42 ID:F99LD7Fr
>テキストはバイト列じゃなくて文字列として扱われる
バイナリとして比較するということを言いたいのかな?
逆だろ
211 :
デフォルトの名無しさん:2014/05/31(土) 01:45:04.55 ID:tHdAdTRr
>Diagnostics.ProcessStartInfoのStandardOutputEncodingを設定すれば
>ナマのutf-8を吐いてくれる。
これは勘違いで誤り。
utf-8をsjisに変換してくれる、が正しい。cmd.exeでも同じ挙動。
そもそも適切なエンコーディング指定する方法がないのだから
>そもそも自分でエンコーディング指定しない状態でうまくいくと思うのがおかしくね
で軽々しく済む話ではないのは明らか
むかしは、シフトJISのテキストをバイト列として(バイナリとして=j処理した。
(当初からJavaは、テキストを文字列として処理してきた)
いまは、Perl, Python, Rubyは、文字列としてテキストを処理できる。
スクリプトがどの文字コードでかかれてるか明記。
出力するとき、内部の文字コードから表示の文字コードに変換。
213 :
デフォルトの名無しさん:2014/05/31(土) 02:00:38.69 ID:tHdAdTRr
ちょっとエンコーディング指定すればいいなんて手間じゃねえし
なめてんだろ
>>190本人が、何もしなくてもUTF-8形式を適切に処理してくれるって考えは甘いってことを理解してりゃそれでいいよ
>>214 BOM付きUTF8ならば適切に処理されるんだからややこしいのであって
考えが甘いとかそういうことじゃないんだよ
こうやって精神論にすり替えて叩いてくる
どうせわんくまのバカどもが食いついてんだろ
お前らいつも参考にならないんじゃアホ
216 :
デフォルトの名無しさん:2014/06/02(月) 22:30:48.29 ID:iXPDpkrB
>>207 口だけのわんくまカス(あるいはそれと類する存在)よ
俺は100%間違ってないみたいな態度とってるんだがお前は間違ってんだよ
都合がどうのこうのだという話はしてない
少なくともお前の書き込みはいらなかったし死んでほしい
利用者のアラをつつくような(もちろんこちらのあらはなかった)グズは死ねよ
以下の挙動がcmd.exeなどとは違っててバグなんじゃないかと言ってるんだが?
アドバイスくれクズ
>>203 >これ(utf8がsjisに文字化けした出力)をファイルに落とし(Set-Content
-Encogin Default指定) て
>Get-Contentで読み込む(-Encoding utf8でエンコード指定)と
>文字コードはあってるのにバイトが欠けたような化け方をして元のコードには戻らない。
>cmd.exeのutf-8→sjisの変換(iconvとかnkf)ではそんなバイト欠けしないので
>バグだと思われる。
hyperestraier のようなutf8出力コマンドで再現可能
>>207 そもそも適切なエンコーディング指定する方法がないのだから
>そもそも自分でエンコーディング指定しない状態でうまくいくと思うのがおかしくね
で軽々しく済む話ではないのは明らか
cmd.exeではこんなビット欠けは起きない
218 :
デフォルトの名無しさん:2014/06/02(月) 22:37:17.51 ID:iXPDpkrB
>>207 コマンドの標準出力にはエンコード指定する方法なんかないので
大げさなラッパを作る必要がある
cmd.exeの頃は勝手にutf16leに変換されるなんてことなかったし
変換し直すだけでトラブルはなかった
分かったかわんくまバカ
219 :
デフォルトの名無しさん:2014/06/02(月) 22:43:53.50 ID:iXPDpkrB
echoや>の出力がUTF-16LEなのはハマるな
もともとUTF-8で出力するプログラムとかなんかおかしくなるし
220 :
デフォルトの名無しさん:2014/06/02(月) 22:46:54.35 ID:iXPDpkrB
じゃあ
echoや>の出力がUTF-16LE
である利点を語ってくれ
標準出力unicode化は今まで全く力を入れてこなかったことので悲願でも何でもない
それ以外で
>>192 正直そこらへんのブログの落書き情報よりつっこんだ話してるからね
このスレ読めばUTF8関連のトラブルは解決するだろう
もちろん俺だけのおかげであって
わんくまやムタや魔界仮面(宇宙仮面ではない)の出番はなかった
わんくまが役に立ったことなんかないがな
利点も糞も、echo(write-output)は、生のオブジェクトを扱うことになるわけで、
つまりは、.NET仕様の根幹だから今更変えようがないでしょ。
従って、文字コード変換とかは受け取る側が全部面倒見る必要がある。
が、今どきUTF-8くらい標準(共通パラメータ?)で何とかしろよ、っていう点には同意だが。
エンコーディングを指定すればいいだろ
Get-Item も Write-Output もオブジェクトの配列を引数に取りますが、
> Get-Item a.txt, b.txt # a.txt, b.txt 両方表示
> Get-Item a.txt b.txt
Get-Item : 引数 'b.txt' を受け入れる位置指定パラメーターが見つかりません。
ここまでは良いのですが、
> Write-Output 1, 2, 3
1
2
3
> Write-Output 1 2 3
1
2
3
Write-Output の2つ目のコマンドがエラーにならないのはなぜでしょうか?
>>224 値を受け付けるパラメータの数が1つだけだとこういう挙動になるのかと思ったけど
Write-Hostでも同じようにエラーにならないな
>>215-216 いやお前は必要な情報を提示したつもりだったのかも知れんが、
>>190のレスだけじゃ一般論として文字コード意識しないと駄目だろって話にしかならない
ここで聞いて良いのか分からないけど分かる方居たら教えて下さい。
Get-WmiObject -ComputerName IP -Credential $cre 〜としてサーバの情報取って来ようとしてるんですが、UserAdministrator Passなし で認証のダイアログ等を出さずに実行するだけで取得する方法はありますか?
パスワードの設定がされていればそのまま取ってこれるんですが、パスなしの場合は無理でしょうか。ちなみにドメインには参加していません。
WinRMを設定して使う。
SSHみたいにリモートでコマンド実行できる様になる。
>>228 ちょっと調べてみた感じサーバ側の設定が必要なんですね
まだ入社したばかりで、大量にあるサーバを全手動でチェックしてるのでそこをなんとかしようと思って調べてました
お上にお伺い立てないといけませんが、もうちょっと調べて行けそうなら考えてみます
ありがとうございます
#file1.txt
hoge
fuga
$a = gc file1.txt
$a[0] #=> hoge
---
#file2.txt
hoge
$a = gc file2.txt
$a[0] #=> h
gc file2.txt | %{$_} #=> hoge
ログの集計で軽く嵌ったわ。
柔軟といえば柔軟なんだけど。
バージョン2.0使ってるけどConvertfrom-Csvで変換後にある列がブランクの行をWhereで抽出して表示させようとしたんだけど
他の列は「-eq ""」でいいんだけど最終列だけは「-eq $null」にしないと抽出できないね。
列ごとに書き方変えるの面倒なのでIsNullOrEmpty使うようにしたけどバグに近いレベルの仕様だな。
上位バージョンだと改善されてるのかな?
232 :
デフォルトの名無しさん:2014/06/20(金) 16:53:37.72 ID:wHzCGsbi
>>231 IsNullOrEmpty
使うものですよ
CSV自体が欠陥規格だから、変換後のデータをよーく検証しないのが悪い。
Windows PowerShell 伊瀬
235 :
デフォルトの名無しさん:2014/06/21(土) 10:30:10.12 ID:CuxdLLeL
伊瀬って人の名前かと思ったわ
× 伊瀬
○ 伊勢
>>233 まあ表示させようとしたのはタブ区切りファイルなんだけどね。(「-delimiter `t」を指定)
ちなみにタブ区切りファイルの全行の末尾にタブ1個追加すると最終列も「-eq ""」で抽出出来た。
余談だけどOutGridViewの表示内容をコピーすると全行の末尾に余分なタブが付いてるのもこれ絡みに理由なんだろうか…
238 :
デフォルトの名無しさん:2014/06/26(木) 07:18:34.55 ID:W91RvMJw
>>237 末尾のタブの有無じゃなくて
もしかして、ファイルの最後に改行が入って無いんじゃない?
これはWindowsの内部情報を操る部分にだけ使い、
一般的なUI処理・データ処理はバッチファイルや
PythonやRubyなどを併用した方が良さそうだな
コマンド名が冗長でついていけない
他のLL覚えてて使用できる環境ならそれで十分だとは思うが
さすがにバッチはないわー・・・
241 :
デフォルトの名無しさん:2014/09/02(火) 09:24:06.69 ID:uW2FT7+h
>>239 ls,cd,cpなど、UNIX系の短いコマンド名も使える
コマンドの命名規則が統一されてるから、細かく覚えてなくても、getcommandとタブの補完で済む
244 :
デフォルトの名無しさん:2014/09/04(木) 21:44:10.03 ID:tOnhAyW6
Windows Server 2012 R2 でFPTサーバー機能インストール後
下記コマンドでサイト追加すると物理パスが設定されない
Import-Module WebAdministration
New-WebFtpSite -Name "●●●" -PhysicalPath "パス文字列"
administrator権限で実行してるし、GUIで設定すると問題なくできる
パス文字列をダブルクォテーション無しやシングルクォテーションで囲ったりも試したがダメだった
誰か助けてくれー
>>244 MSのサポートに聞けばいいじゃん
権利持ってるんでしょ
入力したコマンドとエラーメッセージを、正確に書け
パスは相対・絶対?ドライブ名は?
カレントディレクトリはどこにある?
247 :
デフォルトの名無しさん:2014/09/05(金) 19:56:46.63 ID:AtOrYG8X
>>245 ライセンスは会社で買ってるの
マイクロソフトのサポートページからWindows Server 2012 で
カテゴリでpowershell選んでいくと「支払い方法」とか出てきてひよってしまった
もうちょい頑張ってダメなら聞いてみる
>>246 コマンドは下記
Import-Module WebAdministration
New-WebFtpSite -Name "test" -Port 21 -PhysicalPath "P:\test"
エラーメッセージは表示されず、物理パスが空欄でFTPサイトが追加されてる
パスは絶対、ドライブ名はPドライブがありtestフォルダも作成してる
存在しないパスを指定した場合はエラーになる
カレントディレクトリはC:\Users\Administratorだと思う
(AdministratorでログインしてそのままPowerShell実行 いま職場じゃないので正確じゃなくてすまん)
Windows7でも試してみたが同じ状態になる
PowerShellと同じフォルダにある、powershell_ise で、
-WhatIf オプションを付けて実行してみたら?
このオプションは、実際には実行されず、
何が起こるか表示するだけ
この程度でプレミア使ってたら他で使えなくなるだろw
250 :
デフォルトの名無しさん:2014/09/25(木) 18:53:25.00 ID:3nQex4gX
power shellは、ファイルの入・出力の真似事のようなことはできても、
まともにプログラムを作るのは無理だな。
251 :
デフォルトの名無しさん:2014/09/25(木) 23:29:14.42 ID:lRwJZ1gU
そりゃ言語部分は、インタプリタの
スクリプトだから、目的が違うよ。
組み合わせれば、いいものもできるが
それだけじゃできても、遅くて無理。
DSCとかいうの話題出てないようだけどあれは何なの
バッチはこんなのまでバッチでやるなんて・・とネタで盛り上がりやすかったんだよな
wshになるとCOM化オブジェクト化+本格スクリプト使用でできて当然、はしゃぐことはなくなっていった
PowerShellはさらに進化し玄人受けがすごく良いが登場時以降は小康状態へ
もっと新規に触れてほしいね
PowerShellなら、様々なファイルの属性を取り出せる
Nameでファイル名
DirectoryNameで、フォルダまでのフルパス
FullNameで、ファイル名付きフルパスを取り出す
(FullName = DirectoryName + Name)
ファイル名について、
Extensionで、.txt などの拡張子の部分
BaseNameで、Extensionを除いた部分
(Name = BaseName + Extension)
.NETのクラスの説明を参照
何怒ってんの
258 :
デフォルトの名無しさん:2014/10/03(金) 23:08:21.66 ID:HQ6EBXmx
ほんとだね。何か言いたいことがあるのかな?
powershellから外部コマンドを実行する場合の方法で相談にのってください。
任意個数の引数を指定して外部コマンドを実行するにはどうすればよいでしょうか?
外部プログラム user.exe があるとして、それらに対する引数が任意数あるとします。
$command_line = "user"
として
ループをまわして内部で各種条件判定を行い条件に合致した場合は
$command_line += "-commnad-hoge"
のように対応したコマンドを配列に追加します。
最終的には以下のように設定した状態と同様になります。
$command_line = "user","-command-hoge","-command-fuga","-command-moge"
これをコマンドとして実行したいのですが
$command_line.split()
& $command_line
これだとうまくいきませんでした。
invoke-command -scriptblock { $command_line }
もダメでした。
引数個数が決まっているなら、 -ArgumentListで対応できるのですが・・・。
こういった場合どうすれば良いでしょうか?
260 :
259:2014/10/04(土) 23:15:01.58 ID:zSlTHuRa
訂正
$command_line.split()
↑の行は必要ないです。
$program = "user"
$arguments = @()
$arguments += "-command-hoge"
$arguments += "-command-fuga"
$arguments += "-command-moge"
& $program $arguments
もう一つ質問です。
あるディレクトリが存在していたらそれを削除して新たに生成するという処理を書いているのですが
if ( Test-Path $new_dir )
{
Remove-Item -path $new_dir -recurse -force
}
New-Item -name $new_dir -type directory
と記述したところ、既存の$new_dirが存在していてかつ、中身が少数のファイル数だった場合は問題なく動作しました。
しかし、小さいサイズのファイルが大量にあり削除に時間がかかるような$new_dirの場合
New-Itemが実行される際にエラーになります。
New-Itemが実行される時点でまだ、$new_dirが残っているらしく、すでにディレクトリあるからエラー、といわれてしまいます。
実際にディレクトリをみにいくとすでに消えています。
動作としては、 Remove-Itemの実行完了を待たずにNew-Itemが実行されているような印象でした。
Remove-Itemのオプションで-waitとかもないですし、
これを解消にするにはどうしたら良いでしょうか?
>>264 > それはPowerShell固有の問題ではなく.NETの問題ぽいんだよね
うーん、いろいろ深刻なんですね。
割とよくある処理だとおもうのですがw
> 昔これに遭遇したときどうしたかなと調べてみたらフォルダそのものは削除せずにその配下を削除するというコードでお茶を濁してあった
とりあえず、URLを参考にお茶を濁してみます。
ありがとうございました。
削除に先立ってそのフォルダをリネームしてしまうのはどうかね
>>266 > 削除に先立ってそのフォルダをリネームしてしまうのはどうかね
リネーム先の名前がかぶってるかとかチェックするのがだるそうなので
簡略化してかくと↓みたいにして対処しました。
とりあえずこれで問題なくいけてます。
こういうポーリング処理は見苦しくてあまりすきじゃないんですがしょーがないです。
同期オブジェクトでももらえるなら、もらって終わったら起こしてもらうほうが好きですね。
remove-item $path
while ( test-path $path )
{
start-sleep -m 500
}
new-item $path
複数のやり方から自分で選択したのにしょーがないもないもんだ
$a = remove-item $path とか remove-item $path > $null とかかね
いや試してないけど
> $7zip="C:\Program Files\7-Zip\7z.exe"
> dir *.zip | % {&$7zip x $_ -y "-o""$($_.Directoryname)"""}
やっていること
7z.exeでそのディレクトリにあるすべてのzipファイルを、
新たにディレクトリを作らず、その場にすべてのファイルを解凍
同名ファイルは上書き。7z.exeのパスは通していない
ポイント
・文字列のパスの先頭に&をつけると実行。変数でも可
・プロセスに渡す"は""。`でエスケープかな?と思うのは間違い
・dir=gci。gciはファイル名ではなくてファイルオブジェクトが渡るので重いっちゃ重い
がそのおかげでファイルオブジェクトのメソッドが使えて便利
・$_はパイプの現在の値。。for /fだと%iとか指定してたあれ。ここではファイルオブジェクト
・メソッドは$()でかこむと値を取り込める。""の中は展開される
Outlookのフォルダ構成を出力するのってどんなコマンドレットですか?
企業の部門エンドユーザーだが、内製での業務効率化に使えるかなあと思って勉強している
古臭いUNIXシェルに、.netオブジェクトと現代的なスクリプト言語の機能を無理矢理
詰め込んだような感じ。記号やオブション指定が多く、かなり取っつきにくい印象あり
これの想定ユーザーはエンドユーザーではなく開発技術者なのかな?
UNIXシェルを遥かに超えてるが故に?普及してないな。
デフォでセキュアなのも原因か。
UNIXみたいにアプリがコマンド連携できないから
コマンドの公式エイリアスが多すぎるのも頭の痛いところ
get-childitem・gci・dir・lsなどと複数あり、大文字・小文字も自由となれば
人により表記のブレが大きくなり、コードの共有に難が出てくる
それならバッチファイルで済ませたくなるのが人情
277 :
デフォルトの名無しさん:2014/10/30(木) 08:43:46.53 ID:h9RzQ4Cj
>>276 エイリアスは、
他の環境での利用者を考えた結果だろうから
バッチファイルで済ますという考えがあるなら
エイリアスはdos表記利用だけ、あるいはエイリアス禁止に
してしまう手があるともいえる。
278 :
デフォルトの名無しさん:2014/10/30(木) 08:48:36.56 ID:h9RzQ4Cj
>>273 もともとがサーバー管理者向けにできたもので、
その利用範囲が拡大してきたということでしょ。
エンドユーザーの想定は、少なくとも当初は無いと思うけど。
>>275 その意味が分かんない。PowerShellの方が連携しやすいと
いう認識あるんだけど、思っている意味が違うのかな?
>>278 UNIXみたいなCUIアプリはパイプと標準入出力で連携できるけど
windowsは基本GUIアプリばかりなので連携できない
もしかして何かあるのなら無知な私に教えてくださいませ
Powershell は Powershell で閉じてるよねえ
grep したり find したりとか自前でやるあたりやっぱりシェルっていうより言語環境に近い
281 :
デフォルトの名無しさん:2014/10/30(木) 13:23:12.07 ID:ApVpmuLz
>>279 >基本GUIアプリばかりなので
自身で主に使っているのがそういう環境だ
ということじゃないかな
旧来のシェルは単にテキスト吐き出すだけだからね、
それ以上でも以下でもない。
zshやbashは組み込みコマンドだけじゃ何も出来ないからな
awkとかperlのワンライナーとか使い出したら、それはもうシェルスクリプトって次元じゃないだろう
>>279 本業のWindows Server系ではまずPowerShellコマンドレットで機能実装してGUIの皮を被せ
GUI操作内容を後でスクリプトとして吐き出したりできるようにしているよ
285 :
デフォルトの名無しさん:2014/10/30(木) 22:24:49.66 ID:k8NiVNHr
とはいえperlつかっても結局テキスト吐き出すだけだし
アプリプログラムとしたら、めちゃくちゃ遅いので
その面ではメリットのある利用はシェル替わりにしかならなから
弱ったもんだ。
286 :
デフォルトの名無しさん:2014/10/30(木) 22:32:50.58 ID:k8NiVNHr
>>279 そもそも、Serverでの管理用に出てきたのに、基本GUIなんて
こと有り得ないでしょう。ちょっと勘違いしてるかな。
>>279 GUIしかないアプリ間で連携させたいというなら
そもそもバッチファイルだろうがUNIXだろうが無理な話で
Windowsだってサーバー管理はコマンドラインツールでどうにかしてきたし、
コマンドラインツールを勉強せずに連携とか言ってるなら、そもそも思想がおかしい。
PowerShellになると既存のコマンドはほとんど置き換えられてしまうけど
色々なコマンドのオプション指定方法がある程度共通化されて、学習コストは下がってきてるし、
データの連携もやりやすくなってるから、今までの経験は置いといて覚えなおすのが良いと思う。
>>284 スレ違いかもしれないけど、PowerShellのGUIって何で作るの?
289 :
デフォルトの名無しさん:2014/10/30(木) 22:47:51.51 ID:k8NiVNHr
WPFでもWinFormでもSiverlightでも。
めちゃくちゃ簡単で自由度高いよ。
読みづらいんだけど。規約とか工夫してることある?
291 :
デフォルトの名無しさん:2014/10/30(木) 22:57:13.10 ID:k8NiVNHr
>>290 私の場合は、省略形(エイリアス)は使わないようにしてる。
自分だけならいいんだけどね。
>>288 アプリの機能をコマンドレットとして実装してるってだけで
別にPowerShellでGUIまで実装してるわけじゃないよ?
サーバー管理系以外のアプリもコマンドレット実装してたりするもんなの?
>>292 自分でつかうぶんにはコンソールから使えばいいんだけど、他のひとにつかってもらうときにはGUIがあったらいいなー何て思ってるのでつい反応してしまいましたがな。。。。
295 :
デフォルトの名無しさん:2014/10/30(木) 23:13:10.90 ID:k8NiVNHr
まだそんなにないでしょうね。
わたしは作ってるけど。
米国ではツールとしてだいぶでてきてる。
聞いていることの回答になっているかはわからないけど。
296 :
295:2014/10/30(木) 23:15:39.82 ID:k8NiVNHr
学習中だが、コードが見にくいですなあ
キャストも添字参照もオブジェクトのメンバアクセスも[]を使うので
[]だらけになってしまいがち。あと$・@・{}などの記号が多い印象
シンプルなPythonから来たのでかなりつらい
旧来のシェルを知ってると馴染みぶかくていい
299 :
デフォルトの名無しさん:2014/10/31(金) 07:03:03.31 ID:rr8q/oyJ
記号が多い言語と言えば
静かな湖畔の森の陰から
もう起きちゃいかがとカッコウがなく
カッコウ カッコウ カッコウ カッコウ カッコウ
Lispの歌でした
300 :
デフォルトの名無しさん:2014/10/31(金) 09:19:46.12 ID:th/TRSyt
記号の種類が多いのは、何と言ってもAPL
これに種類が勝る言語はないだろう。
作った本人がわからなくなるという話は有名
型を指定できる時点で断然いい
Pythonはワンライナーが致命的に向かないので、Perlやawkがなくなる事はないだろう
302 :
デフォルトの名無しさん:2014/11/01(土) 12:54:29.11 ID:DNMo+a9Y
>>300 そいえば、APLはワンライナーにチャレンジしたがる人の宝庫ですね。
その代り
>作った本人がわからなくなるという話は有名
そのとおり
全ての変数名に$が付くのは、自分にはタイピングの負荷が高いなあ
小指が攣りそうになる
UNIXのBシェルだっけ?あれは確か変数の参照の時だけ$が付いたと記憶している
そっくり真似するのはアレだから、アレンジしてどんな時も付けるようにしたのか?
直交性の話じゃないの
全部付けるにしたほうが構文解析も楽だろうし
シェルで$使わないのって知らないわ
由緒正しいシェルスクリプトでは$は参照用の記号だよ。
$a=aなんてやったら$aの中の変数にaが入っちゃう。
なんでもかんでも$つければいいって、バカのやることだよ。
=の隣にスペース置くなとか、古いシェルは罠だらけだよな
配列とかパラメーター展開も意味不明な構文暗記させられるし
PowerShellは何もかも洗練されてる
308 :
デフォルトの名無しさん:2014/11/02(日) 09:27:10.54 ID:L9JlfI9E
UNIXの場合は、初期のころツールがほんと少なくって、シェルに頼るしか
なかったし、使うのもシステム関係者と一部研究者が多かったので
それでも、どうにかなったという感じだったな。
私の周りはSASを使っていたのでUNIXでもシェルを使う場面はほぼなく
開発できたが、他のツール使ってる部門ではジェル必須(だらけ)だっな。
ジェル必須とかスタイリッシュな職場だったんだね
310 :
デフォルトの名無しさん:2014/11/02(日) 10:32:03.37 ID:7/ZQZRkL
まあ言い方次第だね、しかたなくシェルだったんだけどね。
開発効率メチャクチャわるくて、私たちの1/10くらいの進度だった。
シェルだけじゃすまないからね。
その時代と比べたら、今は雲泥の差だ。
いや、誤字を茶化しただけだから・・
自分で解説するのどんな気持ち? ねえどんな気持ち? (AA略
最近つかいはじめたけど[ ]の扱いがうざすぎる
日本語キーボードなら ( ) より入力楽じゃん
他の言語の流儀で通そうとすると使用頻度増えるかもね
たかがコマンド実行環境、という認識で使ってればほとんど出番はない
315 :
デフォルトの名無しさん:2014/11/02(日) 13:18:15.72 ID:8HCUuVfe
[ ] は、 あ〜確かや
拡張子の違う複数のファイルがあって
[a].a
[a].b
[a].c
次のような処理を書いたんですけど
$file = "[a].a"
get-childitem $file.replace(".a","*").replace("[","````[")
なんかスマートじゃない気がしてもっと良い書き方はありますか?
-literalpathをつかうとワイルドカードは使えなくなるみたいですし
ああワイルドカードの話ね、-filterパラメータ使うと楽だよ、フルパス指定はできないけど
ls -filter [?].txt
逆だった
ls -filter [a].?
>>317-318 ありがとうございます
すいませんもう一ついいですか
moveの場合だと次のようにしたらfilter関係無くカレントディレクトリの全ファイルマッチしてしまうんですがどうすればよいでしょうか
move-item -filter [a].? .\* .\dest\
なんだろね、Copy-Itemならちゃんと絞ってくれるけど
基本列挙は ls に任せてファイル操作系コマンドは宛先指定だけにした方がいいよ
$arr=ls
foreach($f in $arr){
コマンド
}
一旦、該当するファイルを、配列に入れて、
その配列から、1つずつ取り出しながら処理する
今日ハマったこと
.replace("hoge", "hage") だと正規表現が使えないけど
-replace "hoge", "hage だと正規表現が使える
STAオプションでで起動してないからでねーの。
325 :
デフォルトの名無しさん:2014/11/04(火) 03:25:40.87 ID:30WYsMeZ
このコマンドで、バージョンがわかる
$PSVersionTable
PSVersion 3
CLRVersion (.net) 4
BuildVersion 6.2
PowerShellと同じフォルダにある、
PowerShell_ise を使えば、デバッグしやすい
-WhatIf を付けて実行すれば、実際には実行せずに、
何が起こるか表示してくれる
327 :
デフォルトの名無しさん:2014/11/04(火) 08:46:27.82 ID:eLjF+jjJ
>>322 ためしてみたけど、
おれは、そのままで動くよ。
Win7 64bit 環境
328 :
53:2014/11/04(火) 08:47:20.12 ID:5vxSHexS
329 :
327:2014/11/04(火) 08:50:19.00 ID:eLjF+jjJ
あ、書き忘れ
PowerShellのバージョンは V3.0
330 :
53:2014/11/04(火) 18:47:12.50 ID:5vxSHexS
ループに入るタイミングを間違えてたんでやり直した。
桁が一つ違ってた。
数値がそれなりだったからずれてるのに気が付かなかった。
185010 i+=1 datetime.datetime.today().second
173615 inc(i) 上に同じ
1372280 i+=1 int(time.perf_counter())
1050301 inc(i) 上に同じ
>>320-321 やっとわかりました
こうやればいいんですね
get-childitem -filter [a].? | move-item -destination .\dest\
パイプの使い方がUNIXと違って理解したらすんなり解決しました
ずっと悩んでたんかいw
聞いてくれてよかったんに
>>332 いや一応目的は達成してたので保留にしてただけで
パイプの使い方を知ったら解決したってだけです
ちなみに今日もハマってしまったことがあるんですけど
foreachがforeach-objectのエイリアスだと思ってたら別物で
foreach-objectはbreakが使えなかった
334 :
デフォルトの名無しさん:2014/11/10(月) 18:28:50.51 ID:y2XAPBpw
foreachの件は、以前から、ちがうよ〜って
結構いわれてますね。
高嶋の演技いいね
336 :
デフォルトの名無しさん:2014/11/11(火) 04:02:01.76 ID:g7KV1ReX
>>331-334 パイプで受け取ったオブジェクトを表すには、
'$_'という自動変数を使う
Get-Variable で自動変数の一覧を表示できる
ls -Directory | ForEach-Object {$_.Name}
powershell2.0でモードレスダイアログ作ってるんですが
表示したばかりの状態でESCでキャンセル動作、
Enterでデフォルトボタン押下動作にするにはどうしたらいいんでしょうか
MSとかのサンプルにはそういうのが見つかりませんでした
VBとかだとこんなの当たり前だったのに情報源が乏しくて厳しいです
338 :
326:2014/11/12(水) 08:49:13.77 ID:sOXRgmSx
>>326 を見て
.NETのFormクラスのプロパティ
AcceptButton → Enter
CancelButton → Esc
このFormクラスの一番下の方に、C#,C++,VBのサンプルがある
このコマンドで、System.Windows.Forms.dll
がロードされているか確認して
[System.AppDomain]::CurrentDomain.GetAssemblies() |
Where-Object {$_ -match "form"} | ft -Wrap
文字列が長いので、ft -Wrapで折り返して、表示する
Format-Table (ft),ft -Autosize
Format-List (fl)など色々ある
もし、ロードされていないのなら、このコマンドでロードして
[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
>>338 できました!
ありがとうございました
しかしこれって適当な.NET系言語と並行で覚えた方がよさそうですね…
VB.netがあるじゃない
まさかあの噂でしか聞いたことがないVB6のことか〜
341 :
デフォルトの名無しさん:2014/12/04(木) 08:25:18.27 ID:ce/wf1ga
xcopyは古そうなので、robocopyを使おうと思ったが、
Win8で、robocopyで、フォルダを丸ごと再帰的に、
すべての更新されたファイルと、
新しく作られたファイルのみをコピーしたい
(ショートカットはコピーしない)
robocopyのオプションが複雑すぎて、わからないw
どう書けばよい?
>>341 ここはPowerShellのスレなんで他で聞いてね
>>341 日本語で書いてあるから読めば分かる。
読んで分からなければ動かせば分かる。
/MIR オプション無けりゃ失敗しても被害は少ないw
.\のようなUnixの変な流儀まで真似しなくていいのにと思う
バッチファイルの方が気楽だなあ俺は
346 :
デフォルトの名無しさん:2014/12/06(土) 09:30:22.09 ID:1UBNwgr7
>>346 .\ と言えばカレントディレクトリに決まってるだろ
.\つける方が合理的だと思うけど
UNIXのCronも通常、環境変数はリセットされるからね
バッチファイルと違ってセキュリティ的にクリティカルな場所での運用も期待されてるってことなんだよね。
単にカレントディレクトリをパスに加えるかって話だな
補完はできるからあまり苦にならんと思うよ
バッチと違って・・・とか見当違いのこと言い出すアホはもっと勉強しろ
バッチのほうが慣れてるからバッチのほうがいいと言い出すのは当然のこと
353 :
デフォルトの名無しさん:2014/12/07(日) 17:17:24.28 ID:fifuCS4i
>>342 パワーシェルでもコマンドプロンプト使えるんですが
単純なディレクトリサイズ計算したら、ディスク上のサイズと違うんですが
クラスタサイズ?で自前で計算しないといけませんか?
簡単な方法があるんでしょうか?
よくわかりました。ありがとう。
358 :
53:2015/02/17(火) 11:03:57.23 ID:Q2g81oZ1
Python は Ruby より遅いと言う話が出たので試してみました。
環境はWindows 8.1 32ビットなので他言語より5%ほど有利
1秒あたり
カウント数
230794 i+=1 Time.now.sec
223535 inc(i) 〃
なるほど Python の today().second より速い結果が出ました。
そしてすぐ書けた。
でも、CPU時間を使った方はだいぶ遅い。
どうも安定しないし逆転したりするからミスがあるかも。
ラスト 前回
686031 710067 i+=1 Process.times.utime.to_i
635549 644149 inc(i) 〃
359 :
デフォルトの名無しさん:2015/02/20(金) 03:39:11.31 ID:Gmp7b6pB
なんでも出来そうだけど
例えばWebスクレイピングみたいなのやろうとすると
向いてないのでやる気にブレーキが掛かるんだよな
wshの方が楽だし
気づけば何ヶ月もいじっていないw
しかしせめてバッチファイルスレよりは活発にしたい
凝ったことするんだとするとよっぽど慣れてるんでもない限り
VSとかで普通にC#でコード書いたほうがつぶしが聞く感はある。
そうやって作ったexeなりdllなりをpowershell側から上手に使うとかならまだわかるけど。
凝ったことするツールではないと思うが、
頑張ればたいていの処理ができるってところがEmbedded系では重宝したりする。
最近のWindowsなら標準搭載ってのがまず強みだね
レジストリアクセスも楽だし便利
C#で良いじゃん
権限ないとスクリプト実行すら出来ないとか不便すぎる
364 :
デフォルトの名無しさん:2015/03/02(月) 23:27:58.04 ID:stOy1nsj
>>363 おまえはUNIXの世界を知らないのか?
ん?
PowerShell使えるUNIXがあるってこと?
C#はmonoとか使えばいいけど
一応、そういう世界にいるんでね。 君より情報持ってるよ
やったーかっこいい
UNIXは知らんけど
UWSCから PowerShell のスクリプトを実行できたりするんで
「なんだ権限いじる必要ないじゃん」って書き込みを見たことはある。
権限とスクリプト実行許可を混同しているな
確かに混同してしまったが
>>363 が権限と言ってるから
371 :
デフォルトの名無しさん:2015/03/04(水) 11:01:15.21 ID:9w9ZimTQ
レジストリいじるのにC#つかっても、どうせ権限必要だよね。
>>363 一概にスクリプト実行ができないわけじゃない。
ちなみに、C#つかえるなら、コマンドレット作成が容易にできるので
コマンドレット化すれば、実行ポリシーがRestrictedでも実行できたり
する。そういうつくり。
開発環境や外部ツールが使用可能な環境ならシステムデフォルトしか使えない環境より自由がきくわけで
そういうところはC#でもなんでも好きにやればいい
自由にできる環境だけがすべてじゃないからね
373 :
デフォルトの名無しさん:2015/03/05(木) 01:50:54.56 ID:5Zc9dVue
組織変更に伴い、ファイルサーバとADの置換を行いたいとおもいます。
NTFSのアクセス権をSIDで検索してSIDできれば権限を置換したいのですが可能でしょうか?置換する元データはExcelで旧SIDと新SIDと権限を用意して、上から検索してEOFまで実行していきたいです。
マルチってぜんぜん違う板だからいいと思うよ
書き込みないからっていらいらしない
>>376 板が違うほうが悪質ともいえる
普段からそうやって回答者の迷惑を考えずマルチで質問してる人間しかそういうことは言わないが
問題ないと思うならお前が回答してやればいい
知恵袋と2ch.netとのマルチでも質問関連のことをググった時にすぐ出てくるし嫌われる
なぜ嫌われるかわからないならググってください
それでもマルチしたいなら誰も見てないscでやってください
マルチがなぜ嫌われるのか理解できない奴はアスペか自閉症でしょ。
単発質問していくつか回答もらったときに結果を報告しない奴も、マルチとほぼ同罪。
嫌われる理由がわからない奴は、
知らないところで他人から陰口叩きまくられて蛇蝎のように嫌われていると覚悟したほうがいい。
> Google 日本語入力 インジケータ ウィンドウ
なんじゃこりゃーー
381 :
デフォルトの名無しさん:2015/03/11(水) 16:46:59.87 ID:6tE0XEqn
印字 啓太
宇 引導
Google Japanese input indicator window