【最強CUI】PowerShell -Part 2 [無断転載禁止]©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
>>482
VSCodeが決定版
やっぱ同じMS製だし
他言語でも使える excelの選択範囲をpowershellに渡す方法教えて
ファイルに出力→powershellサブプロセス
はダサいから無しで $excel=New-Object -ComObject Excel.Application
$excel.Visible=$true
$wokbook=$excel.workbooks.open("なんとか.xlsx")
$woksheet=$wokbook.ActiveSheet
$actCells=$excel.Selection 要は、最後の1行
$actCells=$excel.Selection そういうのでよく使うのはGetObjectの方だと思う エクセルついでに、
csvをエクセルで開いて配列に一気に取り込んで、それをxlsx形式で新規保存する方法教えて。 $excel=New-Object -ComObject Excel.Application
$excel.DisplayAlerts=$false
$workbook=$excel.workbooks.open(”入力path\なんとか.csv")
$workbook.SaveAs("保存path\かんとか.xlsx",51)
$workbook.Close()
$excel.Quit() ありがとう。
エクセルで開くときはcsv importみたいなコマンドレットは必要ないのね。その辺が調べてもよく分からなかった。
なお、配列にはデータ取り込んでる?
@()に入れる方法がよく分からん。
vbsだとarray=sheet.usedrange でできるけど。 >>492
ごめん、いま明日の引っ越し準備で
対応できない。 $array = $sheet.UsedRange.Value2
で良いんじゃね なるほど。
powershell だからパイプライン使うイメージだったけど、エクセル操作ではあまり使えない感じなんだね。 20年近く前にvbscriptで散々やったものを今必死にPowerShellで再現してる最中なのか。 ほんとそんな感じ。
サーバー管理するわけでもないなら、powershell そんなに覚える必要ないかな。ただパイプラインは面白いと思う ファイル操作には便利だよ
単機能のツール探すよりPSで書いた方が早いこと多い PowerShell より複雑なものは、Ruby を使え
Rubyから、Excel を扱うライブラリも、色々あるみたい pythonスレやpowershellスレでひたすらrubyすすめてくるキチガイはなんなんだw >>500
System.Runtime.InteropServices.Marshal.ReleaseComObject( ) 地獄に落ちてもいいならな
MSもMicrosoft.Office.Interop.Excelはアンマネージドなリソース使うんだからDisposeを真面目に実装しとけよ そうじゃなくて今はClosedXMLとかを使うんじゃないの 客先で他になんにもないときにめちゃ助かる
VBAも悪くないけど基本ライブラリしょぼいし別プロセス連携とかオブジェクト指向やりにくいから
>>505
Book.CloseとかApp.Quitとか要点さえ守ればCOMラッパーが参照カウントを処理してくれるからReleaseComObjectは不要 ただ本音を言うとCOMはもう直接触りたくない
裏方に徹してくれる分にはいいんだけど
そもそもOfficeが.NETのプラットフォームから逸脱してるのが面倒の素 データ取り込み->OleDb
帳票出力->サードパーティのマネージドライブラリ
操作性拡張->VBA
.NET相互運用は需要がない >>507-508
> Book.CloseとかApp.Quitとか要点さえ守ればCOMラッパーが参照カウントを処理してくれるからReleaseComObjectは不要
マジで言ってるの?
それとも最近便利な(まともな)ラッパーでもできたの? ラッパーなんてあるの?
webに転がってるpowershellの糞コードはまともに開放してないし
powershellで気を付けるレベルじゃどうやっても開放漏れは起こる
潔癖ならCOMと親和性の高いwshで処理したらいいし
大抵の人はEXCEL.EXEが残らなければOKって考えでしょ 逆に聞きたいんだが適切にCloseやQuitしててもリソースリークするエビデンスってある? >>511
NPOIとかClosedXMLすら使ったことないん? そもそもエクセルプロセスが生きてる以外にリーク判定ってどうやってんだ? 質問です。EXCELファイル内のマクロコードをGREP検索したいのですが
powershellからそのようなことは出来るのでしょうか?
(powershell以外の方法でも構いません) >>513
C# の話な
> 逆に聞きたいんだが適切にCloseやQuitしててもリソースリークするエビデンスってある?
適切の意味にもよるけどシートを参照したままApplication.Quit() してもリソースリークするって言うのはググれば出てくる
(これはVB.NETの例だけど)
https://social.msdn.microsoft.com/Forums/ja-JP/3a296f83-4a49-4561-a735-570aa7430874/ecxel?forum=vbgeneralja
>>514
COMの話であることも理解できないアホは絡んでくるなよ >>518
お前が誰か知らんけどそんなレスしかできないなら黙ってなよ w >>517
エビデンスって言うには弱いな
コードの断片だけ見せて開放されないんですって言ってる人が居たってだけで
それにこれたぶんGC回ったら回収されるパターンでしょ MSのメモリリークのバグなんて昔から何度もあったのに。MSも随分と信用を得たものだ。 まあ今時COMって言うのは間違ってはないとは思うがCOMの話してるのにNPOIとかClosedXMLととか言い出す>>514が頓珍漢であることは変わらない VS2017にATLついてる。なぜならMSが必要だから。COMなしではWindowsは動かない基盤技術。
おまえらの2chブラウザも動かなくなる。 流れを見ると>>500のレスを>>505が勝手にCOMの話と勘違いしたからそもそも話しがおかしくなってるんだと思うけど
どっちにしろたいした話もできてないからもう終わりでよくね ClosedXMLはExcelを操作するんじゃなくてExcelファイルを操作するライブラリだしww
てかいつまで粘着するの? エクセルでcsvを開いて、名前変えてエクセルファイルとして保存したいんだけど、
c:/test.csv
から
c:/test_add.xlsx
って感じに。
このとき、split-path $_ -parent + "/" + $.basename + "_add.xlsx"
みたいな書き方してるんだけど、もっとカッコいい良い書き方ある? >>534
かっこいいかは分からんけどjoin-path使ったり
Join-Path $_.Directory ($_.BaseName + "_add.xlsx")
置換したり
$_.FullName -replace "\.csv$", "_add.xlsx"
単に文字列内で展開してもいいだろうし
"$($_.Directory)\$($_.BaseName)_add.xlsx" >>535
ありがとうございます。
さらっと3通り出るのすごい。
joinがpowershell 使ってる感あって好き、けど文字列内の$$もいいな PowerShellで画面の文字拡大率を変更する事は可能?
ノートPC使っていると、150%とか100%を変えたい時があるが
いちいちGUIで変更するのが大変 PowerShell.exeのショートカット2つ作ってプロパティで色やらフォントサイズやらを別々に設定して
好きな方を起動するというのはできる 顔を画面に近づけるだけだろ。どんだけデブなんだよ。 好きに変更すりゃいいじゃねーか。GUIで変更は嫌だとか、キーに割り当てるのも嫌だとか、
顔近づけるのも嫌だとか、ほんとデブは馬鹿で横着だからヤダね。
メイドでも雇って変更してもらえや。 >>537 で言っているのは、何の画面のこと?
powershell.exeのコマンド画面も
powershell_iseのエディターも既定値設定できるんで
なんの話か理解できなくて。 自分の文章理解力がなかった
Windowsの画面そのもののフォントサイズを
変更したいという話だったのね。 GUIで設定するのも面倒、句読点を打つのも面倒。脳に障害があるレベルだな。
だが安心してください。Windowsには障碍者モードが実装されてます。 まあ、PowerShellというよりもWindowsコンソールが機能不足かつ分かりづらいのは確か
ただ、フォントサイズくらいは変えられる PPMとか生成したバイナリデータをリダイレクトで保存するのは難しいのかな
cmdはできるのに 句読点の付け方は別に間違っちゃいないけど、2chでそこまでしっかり打つのは少数派だから
ちょっと異様に見えるよ 単純に低学歴、低知能は句読点を打たない。
文章や論文を書く習慣がないし本も全く読まないから句読点がないことに違和感がない。つまり馬鹿。
ひろゆきすら打つ。くだらない知ったかして2ch素人にもほどがあるな。
しかも句読点があると異様だとかもはや脳みそに蛆でも沸いてるレベル。もはや日本人じゃないな。
1 名前:ひろゆき@どうやら管理人 ★[] 投稿日:2014/04/09(水) 14:47:55.24 ID:???
なんらかの不具合を見つけたら、
報告するスレッド。
118 名前:ひろゆき@どうやら管理人 ★[] 投稿日:2014/04/12(土) 02:48:58.08 ID:???
>>25
どうぞ、どうぞ。 ひろゆきも打つからなんだっつーの
本と2ch(というかメールやブログのコメントもだけど)は大きく違う
ソフトによって画面端での自動の改行がさされたりされなかったりするから、長い行はあまり書かない
「。」の代わりに改行で済ますように変化してる
行末に「。」を付けるのはかなり少数派だよ >>550
そういう見方もあるだろうが
昔に戻ると、句読点は必須ではなく
文章に不慣れな人達のために使われるようになったそうで、
いまでいう高学歴というような人に対しては使わないもの
だったそうだ。
そのために、今でも表彰状などには句読点は一切使われない。
ちなみに、句読点が一般的に使われるようになったのは、
明治半ば以降だそうだ。
、 読みづらくなきゃなんでもいいと思うよ
クッソ読みづらくても句読点のあるなしにしか拘らん方が問題ある
読みやすい文の組み立てを心がければいいでしょう 感謝状、招待状等あえて句読点をつけない文章の共通点とは?
https://woman.mynavi.jp/article/150205-71/
かつて、句読点を付けるのは『相手を見下す』
要は、句読点がないと文章も読めないだろうと相手を見なすことに
なることだったようだ。
ま、当時は漢字の利用頻度も高く、漢字ひらがな混じりでも
読みやすかったのでしょう。今はひらがななどの割合が高いので
やはり適切に句読点を使う必要あるんでしょうね。 長文でひらがな比率高いと文の区切りが分からなくなりますからね。 >>550
句読点の、打ち方が下手な香具師もよく、見かける 単に句読点はこのスレで低レベルな煽りを繰り返してるキチガイの特徴ってことだろ
IDかわってもすぐわかる powershellだけでプロジェクト組むとしたらどういうフォルダ構造にする? 煽りうざいから話題換えよう
>>559
良い質問な気がする
ただオレ自身は単ファイルで済むバッチ
みたいなのを書くのがほとんどだから
もし本格的なプロジェクトのフォルダ構成を組むなら
JavaとかRubyとか他言語の構成をマネするかな PSCustomObjectで特定のinterfaceを実装したいんだがやりかたわからん
public interface IFoo {
int Bar(int x);
}
public static class Hoge {
public static void Fuga(IFoo foo) {
Console.WriteLine(foo.Bar(100));
}
$foo = new-object pscustomobject |
add-member -passthru -membertype scriptmethod -name Bar -value { param($p)
return 200 }
[Hoge]::Fuga($foo)
こういうことしたい GoやTypeScriptじゃないんだからメソッドを持ってるからってinterfaceを実装してることにはならんよ
素直にIFooを実装するclassを定義すれば? >>566
むしろ今の内に5.1以降(できれば最新の6.0.1)に慣れておくほうが良いと思うけどな 業務で使うマシンはOSが最新とは限らない
PSもほとんどアップデートされてない
だから低いバージョンでも使えるように訓練したほうがいい
最新版は追いかけるメリットがない 企業ならクライアントもWindows 7とか珍しくないから配布するようなスクリプトだと2.0前提 >>566
add-typeあるんだから普通にC#で書けば良くね
https://pastebin.com/mnvdH77F
PSCustomObjectに実装しないといけないなら知らんけど >>571
それじゃpowershellコマンド使えないじゃん 句読点を多用するのは下手な日本語で嫌われる。
もともとどこが句切りかわからないひと向けの記号だから、句読点の使用は馬鹿にされることもある。 pushd/popd 便利やなあ
わしゃずっとcd使っとったぞい >>575
わたしゃ多用してますわ
push-location
pop-location
と省略せずにつかっておりますです c# scriptingのほうが楽とちゃうか?
ネイティヴコマンド連携だけは若干ps有利かなといった印象 その時々で都合の良いほうを使えばいいよ
同じ.NETなんだから否定する理由も無い >>577
C# scriptingその後の話題が無いところをみると
どうも今一つなんかな >>577
シェルのlsやらcatやらみたいなのもc# scriptingのほうが楽なの? bashとかが駄目な理由に、bashで書きづらくても、そこからpythonとか他の言語にするなら全部書き直しになる CLIが嬉しいと言いたいのかな。ちょっと論旨が理解できないが。 script vs shell scriptとか何十年前の話題だよ
進歩のない連中だ OSのシェルとプログラミング言語の区別がない人間ばかりだから仕方ない。 シェルスクリプトをどちらかに分類したがるのは無理なのでは。 単に、UNIXなどで単機能インタープリターをシェルと
呼び始めたんで、シェルは別物と思う人たちが出てきて
しまっただけ。 OSのシステムコールとプログラミング言語の区別がない人間も多い システムコールとライブラリ関数
http://jibun.atmarkit.co.jp/lskill01/rensai/fulinux/02/01.html
システムコールとライブラリ関数の区別は曖昧で、
昔はシステムコールだった手続きも今はライブラリ関数として実装されていることがありますし、その逆もあります。
そういった意味では、システムコールとライブラリ関数の違いを本気で意識しなければならないのは
カーネルや基幹ライブラリを書くプログラマくらいと言えるかもしれません。
システムコールとライブラリ関数の違いが実際に役に立つのは、manページを参照するときです。
例えば「printf」にはコマンドのprintfとライブラリ関数のprintfがあるので、
ライブラリ関数のprintfの解説が見たければ「man 3 printf」と入力しないといけません。
「write」にはコマンドのwriteとシステムコールのwriteがあるので、
システムコールのほうが読みたければ「man 2 write」と入力しないといけません。 >>586
おまえはシェルがシェルスクリプトだと思っているのか? シェル用のスクリプトだからシェルスクリプトなのに。 powershell_ise coreとかあったら良いのに
と思ったけど流石に需要ないか >>596
俺も欲しい
vscodeでも出来るけど、捨てコード書くには面倒なんだよね VSCode の、Code Runner
ソースコードの範囲を選択して、実行できる
これは、便利なプラグイン! >>598
それ入れてないけど、範囲選択+F8で部分実行できたぞ
多分バージョンアップで不要になったプラグインだね 部分実行できる言語もあるしできない言語もある
対象言語にも触れず「これは便利!」っつってる>>598もアホだし、対象言語もわかってないのに「バージョンアップで不要になったプラグイン」っつってる>>599もアホ VSCode の、Code Runner
ソースコードの範囲を選択して、右クリックメニューから実行できる
便利なプラグイン!
PowerShell にも対応している powershell coreでNuGetパッケージを使いたい場合ってどうすればいいの
Dapperを使う時にC#だったらdotnet add package Dapper; dotnet restoreだけどpowershellプロジェクトだとどうするのかな dotnet add package Dapper
dotnet restore --packages ./packages
Add-Type $source -ReferencedAssemblies netstandard, ./packages/.../Dapper.dll
これでできたわ
お前らまじで使えねえなー とあるフォルダ配下にあるテキストファイルだけ抽出して配列に格納
別のフォルダ配下にあるテキストファイルだけ抽出して配列に格納し配列同士を比較して同じファイルのみを抜き出してCompare-Objectで比較したいんですけどどうやったらできますか? >>607
$a = ls "フォルダ1" *.txt
$b = ls "フォルダ2" *.txt
$a + $b | group name | where count -eq 2 | foreach { $_.name; compare (gc $_.group[0] .fullname) (gc $_.group[1].fullname) | ft } >>608
>gc $_.group[0] .fullname
.fullname の前に、半角空白が入っているから、エラーになる >>608
似たようなことよくやるが、やっぱ癖が出るね
自分なら最初こうやるかな
@(
Get-ChildItem "フォルダ1" *.txt
Get-ChildItem "フォルダ2" *.txt
)|
変数あまり使いたくないし、lsは動作がUNIXとは違うから紛らわしくて >>609
ありゃconemuだと折返し部分に勝手にスペース入っちゃうんだな
>>610
そのへんは好みだとしてもそれ見て気づいたけどファイルが一つしかなくて$aが配列じゃない場合 $a + $b だとエラーになるね
@($a; $b) とすべきだったか 1つか複数かで、オブジェクトの型が違うのか
ややこしい言語やな そういう細かい変な挙動がめんどくさいからC#で書いてAdd-Typeしてるわ
Linqあれば大抵の処理はPowerShellより書きやすいし読みやすい >>608
ありがとうございます
これやったんですけどcountのところで型エラーになっちゃいました
>>610>>611でもダメみたいです >>614
powershellのバージョンは?
古いのはよくわからんけど Group-Object -Property Name とかしたらできるんかね もしpowershell2ならこれなら動くんじゃないかな、試してないけど
@($a; $b) | Group-Object -Property Name | Where-Object { $_.Count -eq 2 } | Foreach-Object { $_.Name; Compare-Object -ReferenceObject $(Get-Content $_.Group[0].Fullname) -DifferenceObject $(Get-Content $_.Group[1].Fullname) | Format-Table } >>616
バージョンこんな感じです
> $PSVersionTable
Name Value
---- -----
CLRVersion 2.0.50727.8762
BuildVersion 6.1.7601.17514
PSVersion 2.0
WSManStackVersion 2.0
PSCompatibleVersions {1.0, 2.0}
SerializationVersion 1.1.0.1
PSRemotingProtocolVersion 2.1 >>617
やると↓
$a=Get-ChildItem "D:\test\*.*" -include *.txt,*.dat
$b=Get-ChildItem "G:\test\*.*" -include *.txt,*.dat
@($a; $b) | Group-Object -Property Name | Where-Object { $_.Count -eq 2 } | Foreach-Object { $_.Name;
ompare-Object -ReferenceObject $(Get-Content $_.Group[0].Fullname) -DifferenceObject $(Get-Content $_.Group[1].Fullname
| Format-Table }
b.txt
Compare-Object : 引数が null であるため、パラメーター 'ReferenceObject' にバインドできません。
発生場所 行:1 文字:134
+ @($a; $b) | Group-Object -Property Name | Where-Object { $_.Count -eq 2 } | Foreach-Object { $_.Name; Compare-Object
-ReferenceObject <<<< $(Get-Content $_.Group[0].Fullname) -DifferenceObject $(Get-Content $_.Group[1].Fullname) | Form
at-Table }
+ CategoryInfo : InvalidData: (:) [Compare-Object]、ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.CompareObje
ctCommand -ReferenceObject $(if ($_.Group[0].Length -eq 0) {"空ファイル"} else {Get-Content $_.Group[0].Fullname})
とかすればいい-DifferenceObjectも同様に >>622
おお!なんか求めてるものができました
ありがとうございます PSVersion 2.0 って、古いな
漏れは、Windows10 で、5.1 >>624
> PSVersion 2.0 って、古いな
Windows 7 の標準装備だから会社によっては今でもその縛りがあるところは珍しくない むしろwin10なのに5.1は古い
6.01入れちまえ 標準で入ってるから使うんであって
わざわざ入れるなんて許されない
それがPowershellの掟 2.0でも問題ないように勉強しつつ、案件が始まったら最新版のインストールを駄目元でお願いする感じ ファイルの最後の文字のみ読み込んで
例えば最後の文字が
〇〇てすと
だったら
てすと
に置換して元から"てすと"だったそのままにしたいんだけどどうすればできますか?
ただし最終行が"てすと"じゃなかった場合は"てすと"を追記したいです
個人的にはループ処理で最終行から読み込んで意図した文字列なら置換って事がやれればいいと思ってます
※バージョンは2.0でお願いします! Ruby で作った
text = File.read ARGV[0] # 引数はファイル名
ary = []
# 文字列を1行ずつ、配列に入れる
text.each_line{ |line| ary << line }
p ary
# 戻り値は、置換が行われたときはレシーバ自身、置換されなかったときはnil
if ary[-1].sub!(/〇〇てすと$/, 'てすと')
# 処理なし。レシーバ自身を変更する
elsif /てすと$/ !~ ary[-1] # てすと で終わらない
ary[-1] += 'てすと'
else
return
end
p ary[-1]
File.write(ARGV[0], ary.join) >>633
ここPowershellスレなんだが… >632をなんとなく作ってみたんですけど、
最後に出力された文字列だけを置換しての部分がうまくいかない
置換自体は出来るんだけどその部分だけ文字列に書き込む方法が分からん。。。
(Get-Content D:\test\a.txt)[(Get-Content D:\test\a.txt).length..0] | Foreach-Object {
if( $_.length ){
if(!($_ -like "*てすと*")){
Add-Content -Path D:\test\a.txt -Value "てすと"
break
}
$_ -replace ".*てすと.*", "てすと"
break}
} >その部分だけ、文字列に書き込む方法が分からん
Ruby でも、ファイルを読み書き両用で開くと、
現在のシーク位置を、あれこれ移動しないといけないから、非常にややこしい。
シーク位置を変数に入れておいて、あれこれ考えるのは、ややこしい
だから、テキスト全体を改行区切りの配列に入れて、最後の行だけを変更してから、
全部を書き込む方が簡単
633 では、そうしている 趣旨に合っているかな?
$list=Get-Content sample.txt
$text="てすと"
foreach($line in $list){
if([string]::IsNullOrEmpty($line)){$line=$text}
$str=$line.Substring($line.length-3)
if($str -eq $text){ $newline=$str}
else{ $newline=$line }
$newline
} 再度
$list=Get-Content test.txt
$text="てすと"
foreach($line in $list){
if([string]::IsNullOrEmpty($line)){$line=$text}
$str=$line.Substring($line.length-3)
if($str -eq $text){ $newline=$str}
else{ $newline=$line }
$newline
}
if($str -ne $text){$text} ぱわーしぇる風にパイプかつメモリ最小で作ってほしーなんつって つーかバッチファイルスレで似たような質問してたアホだなこいつ >>639
いいんだけどこれだと空白行全部"てすと"になっちゃてね? そうしてる。
空白行は空白のままでよかったんだ
じゃIFのところだけ書き換え
$list=Get-Content test.txt
$text="てすと"
foreach($line in $list){
if(-NOT [string]::IsNullOrEmpty($line)){
$str=$line.Substring($line.length-3)}
if($str -eq $text){ $newline=$str}
else{ $newline=$line }
$newline
}
if($str -ne $text){$text} 考えたらこれだと文字数が3文字未満だとエラーになるな
ねむいが・・書き換えてみるかな 今度はどうだろう
$list=Get-Content test.txt
$text="てすと"
foreach($line in $list){
$newline=$line
if($line.length -gt 2){
$str=$line.Substring($line.length-3)
if($str -eq $text){ $newline=$str}
}
$newline
}
if($str -ne $text){$text} >>646
最終行だけてすとじゃなくてその上にてすとの文字列が有るとそのあと全部てすとになっちゃうね こんなもんかね
psv2.0に配列のcountあったっけか
$file = "test.txt"
$text = "てすと"
,@(Get-Content $file)|%{
foreach($i in 0..($_.count-1)){
if($i -eq ($_.count-1)){
if($_[$i] -like "*$text"){
$text
}else{
$_[$i];$text
}
}else{
$_[$i]
}
}
}|Out-File $file >>641
あっちは、「最終行」じゃなくて「空行を除く最終行」だったからちょっと面倒だ >>647
なんと、寝ぼけてやってちゃだめだな。
あとで見直すわ PowerShellコード可読性低すぎワロタwww時代はC#ですわ
Add-Type -TypeDefinition @"
using System.IO;
using System.Text.RegularExpressions;
public class Hoge {
private static readonly Regex r = new Regex(@"[^\n]*てすと$", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.CultureInvariant);
public static void ReplaceLastTest(FileInfo file) {
string s = File.ReadAllText(file.FullName);
s = r.Replace(s.TrimEnd(), string.Empty) + "てすと";
File.WriteAllText(file.FullName, s);
}
}
"@
[Hoge]::ReplaceLastTest((Get-ChildItem ./test.txt)) >>651
PSなら書く必要もないもの多過ぎ
ついでに普通の環境じゃ編集の補助まったくないだろ >>648や>>646のほうがよっぽど無駄なコード書いてるじゃんwww
ループインデックスとか久々に見たわwwwwベタループも条件分岐もくっそ読みにくいしwww
編集の補助ってインテリセンスの事ならこの程度のコードに必要ないだろw
つかpowershellerならVSCodeとっくに入っとるやろwww
C#もサポートされとるやんけwwww >>648
これだと"てすと"の後に無駄な空行があるとその無駄な空行の後に"てすと"って出力されちゃうね エディタすら選べない様な残念な環境で頑張るのがPSですから
ってのは置いといてadd-typeで強引に解決するのは割と好き >>654
最初の条件では空行を無視するとか書いてないけど >>653
C#の別ファイル書いてadd-typeの中にコピペすんの?
それメンテナンス性最悪だよな つうかこれでええやんwwww
誰だよC#とか言ったアホwwwww
function Update-LastTest ([IO.FileInfo]$file) {
$s = Get-Content $file | Out-String
$s = ($s.TrimEnd() -replace '[^\n]*てすと$', '') + 'てすと'
$s | Out-File $file
}
Update-LastTest (Get-ChildItem ./test.txt) 何言われようと、めげずに
どうでしゃろ
$list=Get-Content test.txt
$text="てすと"
foreach($line in $list){
$newline=$line
if($line.length -gt 2){
$str=$line.Substring($line.length-3)
if($str -eq $text){ $newline=$str}
else{$newline=$line}
}
$newline
}
if($str -ne $text){$text} >>658
あれ?
要求されてる仕様の理解が私とちがうな
どっちだろう? ABCDてすと => てすと
XYX123 => XYX123
てすとのてすと => てすと
てすとのabc => てすとのabc
みたいな要望じゃないかな? 2回実行したら全部の行がてすとになって区別付かなくなるけどそれでいい? >>662
>>632の質問投げた本人ですけど最後はてすとでいいです
つまり
ABCDてすと => てすと
XYX123 => XYX123
てすとのてすと => てすと
てすとのabc => てすと
空行 => なにもしない >>664に追記すると最後"だけ"を置換したいんです
途中に"〇〇てすと〇〇"
みたいな感じでてすとってワードが含まれていてもそれは無視したいんです 確認ですが
てすとのabc => てすと
これあってます?
これだと単に文字列 "てすと" が含まれていたら "てすと" と
出力するように思うんですが。 >>632
ごめんこれ質問が悪かったです
最終行が"てすと"ならじゃなくて最後の空行じゃ無い文字列に"てすと"が含まれていなかったら"てすと"を追記したい
が正しい これはどうでしょう。
行に"てすと"という文字列が含まれていたら"てすと"だけを出力
含まれていなければ、そのまま出力
最後の行に"てすと"が含まれていなければ、その行はその出力し
つぎの行に"てすと"を追加
結果は$newlistに出力
function newfile{
param($text="てすと")
process{
if($_.ToString().Contains($text)){$newline=$text}
else{$newline=$_}
$newline
}
end{ if( -NOT $newline.Contains($text)){$text} }
}
$list=Get-Content ファイル指定
$newlist=$list|newfile さいごに空の行もあり得るわけだ。<=これは入れていない
とするとそのはんていを1行追加するようだな。 これだから日本語の仕様書は役に立たないって言われるんだな
テストケースを10個ぐらい書いてくれないと伝わらないパターンだ
コーディングはそれから始めても遅くない 最後の空白行orNull行の判定もいれてみたんだけど
function newfile{
param($text="てすと")
process{
if($_.ToString().Contains($text)){$newline=$text}
else{$newline=$_}
$newline
}
#end{ if( -NOT $newline.Contains($text)){$text} }
end{ if(-NOT($newline.Contains($text) -or [string]::IsNullOrWhiteSpace($newline)) ){$text}}
}
$list=Get-Content 入力ファイル
$newlist=$list|newfile あってるかな?
あとは >>658 の方が綺麗なのを書いてくれることを期待。 >>674
空行は置いといて、最終行以外のとこに”てすと”が入ってても書き換わってしまうが
ただそれが望んだ動作かもしれん
もう分からんw >>676
"てすと"という文字列を含む行は、"てすと"という文字列に置き換える
そうですよ。 >>677
>>665と矛盾してると思うが
"最後だけを置き換えたい" で行の最後か文章の最後か分からんが、
てすとのabc => てすと
がOKなら行の最後じゃない、なら文章の最後だけって事じゃね?
なんか論理パズルやってる気になってきたなw >>676
最後に出てくる"てすと"以外は"てすと"があっても置き変えたくないです
あくまで最後だけ置き換えてください
>>677
置き換えないでそのままでいいです >>677
あー間違えた最後に出てくる"てすと"以外は"そのまま"でいいです >>679
あ、来た
それと最後の空行はどうなの?
@"
aaa
bbbてすと
"@
が元ソースだとして
@"
aaa
てすと
"@
@"
aaa
bbbてすと
てすと
"@
@"
aaa
てすと
"@
の3パターンあるが、どれ? >>681
一番最初がいいですね
↓
@"
aaa
てすと
"@ >>682
OK,やっと仕様が決まったね
めでたい >>679
最後に出てくる"てすと"という意味ですが、したのようなとき
"てすと"を含む最後の行は5行目という意味ですか?
1行目 abmてすとxyz
2行目 1239xxxx
3行目 yyyyyてすと
4行目 xxxxyyてすとyy
5行目 てすとuuuu <== "てすと"を含む最後の行
6行目 zzyyvv
7行目 練習123 >>684
その場合だと7行目を判断して"てすと"以外の文字列なので"てすと"を追記してください。 >>684
君も読解力に問題あるぞw
途中の行は無視でしょ、「"てすと"を含む最後の行」なんて君しか言ってない
5行目はそのままで、8行目に"てすと"が加わるんでしょ >>685
追記とは
8行目に"てすと"という文字列の1行ができるでよろしいですか? はっきり言って>>665が非常に分かりづらい
"最後"って表現は何とかしてくれ >>689
語彙が足らなくてごめんなさい。
最後っていうのをなんて伝えていいのかよくわからなかった
最終行っていうのも違うし、最後の文字列が入ってる行って言えばよかったんかな… >>691
空行っていうのもなんか曖昧というか例えばスペース一個あって改行したらそれも空行だし >>692
それははっきりした方がいいと思うよ。
一番最後の行が、スペースとしたとき
スペースとは、空白文字がありうるのか、nullなのかなど。 >>688
ところであっちのスレと同一人物?
BATでも解決してたはずだけど、なんでまた同じ質問をこっちに? 仕様があいまい
最後と言う言葉があいまい。
全体の文章の最後なのか、最終行を指すのか、どちらか分からないから
最終行だけがチェック対象なのか?
それとも、最終行以外も対象になるのか? >>632
>最終行が"てすと"じゃなかった場合は、"てすと"を追記したいです
これも、最終行が改行で終わっている場合と、終わっていない場合で、動作が変わる
abc\n → abc\nテスト
abc → abcテスト
上は、最終行の次の行に追加されるけど、
下は、最終行に追加される $path = "Documents\hoge.txt"
$text = "てすと"
$file = @(Get-Content $path)
for($i = $file.count; $i -ge 0; $i--)
{
if($file[$i] -match "^\s*$")
{
continue
}
if($file[$i] -match ".*$($text).*")
{
$file[$i] = $text
} else {
$file[$i] += "`n" + $text
}
break
}
$file | Out-File $path
Powershell勉強中なんだけどこんな感じ? 正直今のところ頂いた回答の中では>>658さんの回答が模範解答でした。 >>698
良いんだけど、>>658は>>681で言う三番目で、希望は一番目らしいから、あと一工夫だね
正直もう飽きたから他の人がんばって >>697でいいやん
自分の趣味じゃないから読みにくいけど、条件は満たしてる PSはマルチスレッド気軽に使えないの?
ググるとリモート、マルチプロセスとRunspaceのサンプルばっかり出てくるんだが
2.0だとTaskも無いからキビシイのかね >>702
つかえるんじゃない?
どんな処理をしたいということなの。 いやーなんかねHttpListenerのBeginGetContextでクラッシュするんです
マルチスレッド対応してないのかなと マルチスレッドというより(マルチスレッドだけど)
それが非同期に対応しているかという話ね。 原因わかった
別スレッドだとrunspaceが無いからpowershellコードが動かんのだとさ こんな記事あるけど使える?
RunspacePoolを使って、PowerShellを非同期実行
https://www.gmo.jp/report/single/?art_id=195 >>707
今日はそれを調べてた
GetContext使ってメインスレッドで同期的にコンテキストを受けて
ルーティング処理〜レスポンス閉じるまでをrunspaceでOneWay非同期処理するといい感じで動作してるっぽい >>279
こいつアホすぎてムカつく
わからんなら黙ってろかす! TrustedInstallerのままなのはOS不具合かな
最近こういうの放置でアップグレードしてくから困る 聞いてくれやおじさん
UIautomationとやらを探して2日たらし回しにされた
psのgui自動化ツールはこれでええのか 確かに探すの難しくなってるな
UI Automation PowerShell ExtensionsのDownload(再配布)
ttps://www.code-lab.net/?page_id=21648 UIautomationって旧来技術ってことでWin10では
あらたなことは行わないんじゃないのかな。
たしかGUIがWPFだよね。 ISE
VSCode
Visual Studio 2017
でPowerShell開発やってみたけど一番快適にDebugできるのはVSCodeだった 実行ポリシーを変更をBypassに変更してるんだが
.ps1ファイルを実行しようとすると1日1回くらい(その日の最初?)は以下の文章が出る
出なくする方法ありますか?
実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (https://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "N"):
ちなみにGet-ExecutionPolicyすると
ちゃんとBypassと表示される コンテキストメニューから実行してるなら、関連付け設定が
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "-Command" "if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & '%1'"
になってるから、Set-ExecutionPolicy -Scope Process Bypass を実行するところでそれが出るんだと思う
関連付け設定を変えれば出てこなくなるよ ありがとう
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "%1"に変えてみた
ついでにダブルクリックだけで実行できるように変えたら便利になった csvの中に時間とデータの2列あって、それの直線近似した切片を取りたいんだけどアルゴリズム組まないとだめ?
なおエクセルは入ってないパソコンで使いたい。 pythonでpandas+leastsquare >>720
単に公式に当てはめればいい
$data = import-csv "csvのパス" -Header X,Y
$meanX = $data.X | measure -Average | select -expand Average
$meanY = $data.Y | measure -Average | select -expand Average
$sd = $data | foreach { ($_.X - $meanX) * ($_.X - $meanX) } | measure -Average | select -expand Average
$cd = $data | foreach { ($_.X - $meanX) * ($_.Y - $meanY) } | measure -Average | select -expand Average
$slope = $cd / $sd
$meanY - $slope * $meanX >>720
Accord.Net使えばいいよ
それか今ならML.NETが良いのかね? >>722
ありがとうございます。簡潔に書かれていてすごい。
>>721
pythonでも出来るのですが、エクセル含めソフトインストールできないPCでの運用なので エクセルも使えない環境でデータ分析なんて
とんでもなく非効率だな
現実にはよくありそうな話だけど 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
GWRI8 >>726
装置とそれを制御するソフトウェアが入った専用PCが連動して動く仕組みのシステムで、そのPCのデータをその中で処理したいと思ってて。
大型の装置で、もし誤作動を起こしたら火災や死亡事故もあり得るのでソフト導入は難しい状況。エクセルくらいは問題ないと思うんだけど、許可下りず。 人命にかかわるならPowerShellでもだめだろ 線形回帰分析のためだけにエクセルを導入しようとする高レベルVBAエンジニアさん命を握られてしまった従業員さん 今回だけじゃなくて別のデータ分析する
機会も出てくるかもしれないだろ
エクセルに限らずソフトがインストールできないんじゃ
いろいろ車輪の再発明することになりそう そういう機会がなんども出てきてから検討すればいいよ
まあそうなったらエクセルじゃなくてデータ解析に適したツールを導入するべきだろうけどね
VBAerさんはとにかくVBAを使いたいって目的が先行するから困る なんでもかんでも再発明が悪という風潮はよろしくない
少量の些細な再発明を避けるために大規模なソリューションを導入すると
そのソリューションの管理コストや障害リスクの方が高くなってしまう なんで制御PCと同じのでやろうとしてるのか?
そもそもwi そういう設定なんだなというのは皆わかった上でディスカッションしてる
なので野暮なツッコミは無しにしようや >>735
今はデータをUSBで他のPCに移してから処理してる。
制御PCでやりたい理由は、USBはパスワード付きっていうのもあって面倒で、しかも常に最新の情報を求められるため日に数回USBで出し入れすることになるのでより面倒。
それが毎日となるとめちゃくちゃ面倒。
ということで不慣れなpowershell でやろうとした次第です。 別PCでC#の解析用アセンブリ作ってPowerShellから呼び出したらいいんじゃないの オフラインです。C♯は難しそうなので。
すみません、私事を語り過ぎました。元の話題に戻ってどうぞ 死亡事故が起こるようなマシンだろ
俺なら通常はネットから切り離しとくわ いや現実の問題設定は良い刺激になったよ
そういうのないと同じ話題がループしちゃうし そのPCで処理しても結局USBで持っていかないと駄目なんじゃ AddTypeでNuGet Packageを参照に追加できれば便利だと思うんだがなぜないんだろ
いちいちpackageダウンロードしてzip解答してdll探してAddTypeするの面倒くさい
AddType -PackageSource https://api.nuget.org/v3/index.json -PackageName Oracle.ManagedDataAccess -Version 12.2.1100
$connection = New-Object -TypeName Oracle.ManagedDataAccess.Client.OracleConnection
こんなんできたら絶対便利だろ こういうのは末端のユーザーじゃなくMicrosoftが責任持って整備すべき仕事だよなぁ >>747
Visual Studioだと全部やってくれるのにな csv読み込みのときに、♯が入ってる行が消えるのですが回避方法あるでしょうか?
バージョンは2のため、cat|convertfrom- csv を使っています。 cat|♯を消す処理|convertfrom- csv 半角井桁でも全角井桁でもなくシャープがダメ文字ってことなら、いわゆる機種依存文字に対して内部的に文字化けしてるのかね
Get-Contentの-Encodingパラメーターを変えて試行錯誤してみるのはどうだろ >>753
おっしゃる通りcat時点ではシャープのある行も問題なく表示されていたのでそこでシャープを適当な文字列に置換する事で回避出来ました。
なお文字化け等では無かったためencodingは関係ありませんでしたが、お二方ともアドバイスしていただきありがとうございました。 >>756
そんな仕様初めて聞いた
Excelは#で始まる行も読み込むよ >>756
そういう仕様なんだね。
プログラム内じゃないんだから勝手にコメントアウトしないで欲しい RFCではCSVのコメントなんて定義されてないんだがな
#がコメントとか方言です 「♯を含む行」が消えるって言ってるんだから、実は「#で始まる行」が消えてた、なんてことは流石にないでしょう と思って検証したらマジじゃねーかバーロー
v2では使えないけどcat -raw|convertfrom-csvなら無視されなくなるから、#がCSVコメントとして無視されてるのではなくて、#をコメント行相当のオブジェクトとして返しているGet-Content側がタチ悪いという話じゃないだろうか PCに入ってるPowerShellのバージョンを簡単に切り替える方法はないのでしょうか?
作成したスクリプトがバージョン2でも3でも動くか等の検証を行いたいのですが? ISEがインテリセンス使ったら落ちてたのが
KB4100403で修正されたらしい(未確認) エクセルに書き込む時、例えば
for(i=1; -le 1000;i++){
sheet.cells.item(i,1)=i*5
}
こんな感じにすると非常に動作が遅いのですがもっと高速にする方法はあるでしょうか。
なおvbaでは、
for i=1 to 1000
arr(i,1)=i*5
next
と配列に入れておいてから、
oSheet.Range(oSheet.Cells(1, 1), oSheet.Cells(UBound(arr, 1), UBound(arr, 2))) = arr
と一括で書き込むと速いのですが、PSでもこのような書き方はあるでしょうか。 >>769
速いかは知らんけどそれと同じようにするならこんな感じかね
$n = 1000
$arr = New-Object "object[,]" $n,1
1..$n | foreach { $arr[($_-1),0] = [int]$_*5 }
$sheet.Range($sheet.Cells.Item(1, 1), $sheet.Cells.Item($n, 1)) = $arr >>770
ありがとうございます。多次元配列を使えばよいのですね。
webで調べると多次元配列と多段階配列(ジャグ配列)がごっちゃになってるサイトもあって混乱していましたが、770さんの簡潔な記述をみて理解出来ました。 PowershellからExcelのユーザフォーム(コマンドボタン)を非表示かクリックできないようにしたいのですが、いくつか試してもうまく設定できませんでした。
ご存知の方がいたら、ご教示いただければ。 >>773
別のインスタンスからフォームを操作するってこと?
参考にVBAだとどうやるの? 以下で動くことは確認しましたが、できたらPowershellだけで完結したいです。
$excel = New-Object -ComObject Excel.Application;
$book = $excel.Workbooks.Open('〜ファイル名〜');
$num1 = $excel.Worksheets.count ;
$array = @() ;
for ( $i1 = 1 ; $i1 -le $num1 ; $i1++ ){ ;
if ( $excel.Worksheets.Item($i1).name.substring( 0, 4 ) -eq 'xxx_' ) { ;
$array += $excel.Worksheets.Item($i1).name ;
} ;
} ;
for( $i2=0; $i2 -lt $array.count; $i2++){ ;
$shtname = $array[$array.count-$i2-1] ;
$MDB_index = $excel.Worksheets.Item('MDB').index ;
$excel.Worksheets.Item($shtname).move( $excel.Worksheets.Item( $MDB_index ) ) ;
$excel.Worksheets.Item('MDB').move( $excel.Worksheets.Item( $shtname ) ) ;
$excel.Worksheets.Item($shtname).name = 'yy_' + $shtname.substring( 4, $shtname.length - 4 ) ;
} ;
$excel.run("Unable") * VBAのUnableの中身 ;
Sub Unable()
Dim SHTNAME As String
Dim NUMBER As Integer
Dim I1 As Integer
NUMBER = ThisWorkbook.Worksheets.Count
For I1 = 1 To NUMBER
SHTNAME = ThisWorkbook.Worksheets(I1).Name
If Mid(SHTNAME, 1, 3) = "yy_" Then
ThisWorkbook.Worksheets(I1).CBT1.Enabled = False
End If
Next
End Sub >>776
xxx_のシートをMDBの後ろに並べたいってことでいいんかね?
$book.Sheets[$book.Sheets.Count..1] | where { $_.name -like "xxx_*" } | foreach {
$_.move([Reflection.Missing]::Value, $book.Sheets("MDB"))
$_.name = $_.name -replace "^xxx_","yy_"
$_.OLEObjects("CBT1").Enabled = $false
} >>778
VBAに依存せず実行できました。感謝。 windows10ですが
Get-ItemPropertyでLastWriteTimeを見てみると
エクスプローラで表示される更新日時と異なるファイルが有りました
更新日時の方が作成日時より前の日付になってるので
おそらく LastWriteTimeの方が正しい日付だと思います
これを訂正するためにPSからエクスプローラの更新日付を取得したいのですが
エクスプローラの更新日時がどこから来ているものかさっぱりわかりません いくつかファイルを調べてみると、更新日時とLastWriteTimeの差が一週間離れているのも有るので
タイムゾーンの問題とは考えにくいです
よく見ると、作成日時もCreationTimeと10日くらいのずれが有りましたw
エクスプローラが詳細プロパティ以外の日付を参照してる意味が分かりません
windowsの強制メジャーアップデートで何度かクラッシュした影響でファイルが壊れてるのかも 「書き込みがあったら反応しよう」と思ってる人がたくさんいるからかな? わしはね、ローカルの小物guiでps始めよう思ってたらhtaというものを発見してしまったんじゃ 若者が「HTAって使えるんじゃね?」と思ってしまうのは仕方がない。
オッサン〜ジジイが「HTAを発見した」つったら「今まで何して生きてきたの?」としか言いようがない。
Windowsでのローカルの小物GUIは、今、滅亡の危機ですらある。
WordやExcelを使った自動化すら、今後もできるかどうか怪しい。 HTA軽くていいよね機能追加も楽だし
ランチャーにしてる ローカル実行できるスクリプトで動くGUIアプリに決まってるだろ。
Excel や Access の VBA がその代表格。
COM がベースだから切られる方向なのは分かる。
でも代替できるものがない。
いっとき PowerShell+WPF が期待を担ったが…
・呼ばれる側のアプリにコマンドレットの実装が必要
・.NET ごとオープンソースの世界に行ってしまって Windows そのものが切られそう
・そういうのは C# で書いて配れ、と明示的に言ってくれた方がまだ楽。
が、MS はダンマリを決め込んでいるんだよなぁ… >>793
>COM がベースだから切られる方向なのは分かる。
>でも代替できるものがない。
よく調べてないんだけどVisual Studio Tools for Officeとかはダメ? powershell入ってないXP以下で使えるんすよ
判ってくださいよ とりあえず、PowerShellが「最強CUI」とかいう寝言は取り下げた方がいい。誤解を招く。 >>797
誤解してるのはお前だけだからお前がどっかに行けば解決 >>798-800
管理目的なら最強だろう。確かに。
が、それ以外の目的にはおおよそ優しくない。てゆーか元の開発陣がそう言ってる(管理目的、API指向)。
OSSになったから 6以降も(3でもやったけど…)破壊的な仕様変更をゴリゴリやりそう。
特に PowerShell Desktop は今後バージョンアップは無さげだから、管理系以外の Win系のユーザーは手を出す理由がない。
Win系ですら 「引き継ぎを考えたら VBScript で書いておこうか…」てなる。
WPF は死亡寸前だし。
Winユーザーはバッチや VBScript の後継としての役目を捨てようとしている PowerShell に文句を言う筋合いはあると思うがね。
純粋な対話型CUI の最強は bash系列だし。
何言ってんの??
どこがどう最強なのか言って欲しいわ。
特に、Office系の自動化なんて COMオブジェクトに頼らないと無理だろ。
PowerShell で書くといちいち Excel のセルですらリソース開放が必要でクソ面倒。
Set objExcel = Nothing
とサクッと書けるほうがいいに決まっている。
PowerShell は万能じゃねーんだよ!馬鹿ども。 C#erだから.NETライブラリがそのまま使えるPowerShell好きだわ >>804
最近作ったのはCのヘッダーからC#ラッパー生成するやつ VBAスレに来てるPowerShellゴミクズ荒し何なの?
PowerShellの工夫はより良くするための工夫でVBAの工夫は欠陥を補う工夫って、どのロで言うんだろうね。
VBAだとソース管理出来ないというから、ソース抜き出してソース管理ツールに渡すのはダメという意味なんだろうけど、その割にPowerShellだとVisualStudioと連携できるとか言い出すダブスタ。
PowerShellでC#コンパイル出来るとか、バカ丸出し。
csc使うんだったら何だって出来るだろう。
コイツがムカつくのはそういう工夫を全て否定する所。
それを否定するならPowerShellだってゴミクズだろう。
そういう工夫こそが大事なのに。 スクリプトなんて適材適所で何使ったっていい
他人がなんかいちゃもん付けてきたら、
「こいつ初心者で一時的に心酔してバカ発言してるんだな、
あと数ヶ月もすればこのときのことを思い出して恥ずかしさにそこらへんを転げまわるんだろうな」
程度に気の毒がってりゃいいさ エクセルなんて要らん工夫して紙と電卓を使いこなせば事務作業はできる
会社に支給されたパソコンを目の前置いて、こう主張するおじいさんが居たらどう思う?
馬鹿だねーエクセルなんて簡単なのになんで電卓使うの?
社員ならエクセル使っていいのになんで?
そう思わないかな?
もし思わないなら根本的に感覚がズレてるので同意を得るのは難しいと思うよ つかわざわざこっちにきて何がしたいん?
そいつに言えばいいやん
お前もゴミだろう >>811
ことごとく論破されたので逃げてきたんだろう >>811
VBAのスレが荒れるのが嫌だからでしょ
考えたらわかるじゃんw 脳みそあるの? >>812
PowerShellユーザが迷惑かけてるんだから
スレとしての責任が問われてる 散々論破しているのに最後まで居座られて迷惑してスレが終わったからだよ。
そしてPowerShellの立場はExcelと被るわけでどっちも適材適所だろ。
その場に合ったのを使えば良いんだ。
奴は自分がPowerShellを貶めてるのに気付いて無い。 読んできた
Rubyキチが紛れてるのが無理矢理すぎて笑える >>816
馬鹿野郎、てめんとこの人間が迷惑かけてんだから
うちの者がご迷惑おかけして申し訳ありません
と謝罪するのが筋だろうが ほんとPowerShellは他人に迷惑かけてバッカやな
ほんまクズやな、PowerShellのせいやろな >>822
ぼくは何も行動してないからね、完全に無害だけど
スレ立てしちゃった人がいるんだよ、ぼくはその人を知ってるんだ >>816
こいつです、こいつVBAのスレを立てやがりました 自分がどれだけ悪いことをしたのかについてもわかってないと思います
頭の悪い人っているんだなって思いました 自発的に間違った行動をとる組織にとってのガン細胞が確認されました なんでVBAのスレ立ててもうたんや
何してくれてんのや
PowerShellユーザが言い訳できないレベルで
全面的に悪いことになってまうやろ なんでや!?なんでやねん!なんでスレ立ててもうたんや!!
なんでもっと冷静に行動でけへんねん
スレ立てたら済むと思ったんか?
なに考えてんねん なんでこんな前例を作ってしまったんや
この過ちはPowerShellの後世に禍根を残すで >>831
大造じいさん「ぐぅぅ、わしはもうだめや・・・」 さて、残念なことが起きました
この中にVBAのスレを立てた人がいます
正直に手を挙げてください いくら何でもこれはないわ。
どっちがよりクズかって言ったら断然VBA住人だろう。
PowerShell -Part 3
http://mevius.5ch.net/test/read.cgi/tech/1532236932/ >>839
ずいぶん可愛そうな環境で育ったんだな。同情するよ、ごめんな。 >>808
> PowerShellでC#コンパイル出来るとか、バカ丸出し。
残念ながらそんな昭和脳レベルの話じゃないんだな w
http://yomon.hatenablog.com/entry/2013/06/05/PowerShellスクリプト内でC%23コードを書いて使う Powershellのコマンドを使ってあるEXEを管理者権限で起動することって出来ないでしょうか?
いちいちEXEのショートカットを作って「管理者として実行」にチェックするのが面倒なので・・・
あ、OSはWin7です。 start hoge.exe -Verb runas >>842
あんまり、荒らすつもりは無いけどそれはダメダメだね。
というか、その昔俺もその手法使ってたし。
俺の書いたPS1ファイルのタイムスタンプを見ると2011年だからその記事より前だな。
あのね、何でC#のソースを動かさなきゃならんの?
そういう場面が有るとすればPowerShellだけで出来ないことをしようとする場合だろ。
つまり工夫で乗りきろうとしている場合なんだからVBAのスレを荒らしてた奴風に言わせればC#のソースを書かなきゃならん時点でPowerShellはゴミってことになるのよ。 VBA内でC#のクラス定義してそのままVBA内で使えるようになってから出直してこい
何をするにも不合理に手間がかかるからVBAは糞だって言ってんだよ なんで既存のソース活用するのにcscだの別プロセスだの大げさなことしないといかんの?
.NETがあるのになんで態々COMだのwinAPIだの直で触らなあかんの?
っていう人間なので問題なしです >>846
> そういう場面が有るとすればPowerShellだけで出来ないことをしようとする場合だろ。
バカなの?
・C#のほうが楽に書ける
・既存のコードが流用できる
とかあるだろ >>847
PowerShellだって不合理じゃねーか。
お前は都合の良いところばかり言う。
Excelブック1ファイルで完結できるようになってから出直しな。
>>850
同じことだ。
欠点を工夫で乗りきっているわけだから。 はるほど、ExcelVBAスレで暴れてた奴今度はこっちに来てたのか… >>851
どこが同じなんだよ w
> 出来ないことをしようとする
↕
> 楽に書ける
> 流用できる >>854
出来ないことをしようとする。
←C#のコ―ドをそのままC#でコンパイルして、出来たプログラムを動かす。
出来ないことをしようとする。
←コンパイル済みのプログラムを高速に動かす。
出来ないことをしようとする。
←VisualStudioでGUIのデザインをする。
出来ないことをしようとする。
←面倒なことをPowerShell単体で実現する。
な、一緒だろ。 もう引っ込みつかなくなって意味不明なことを語りだしたか w PoshもVBAも
同じMS製品なんだから
ケンカすんなよ 日本語が通じないのはお互い様だろ。
C#に比較して楽に書けて無いだろ。
つまりC#を元に考えればゴミということになる。
別途VSCodeとかを入れるのは面倒じゃ無いのか?
C#のコード部品にもインテリセンスが効くのか?
楽だとすればそれはC#のことでPowerShellは文字列変数にコード入れなきゃならん。
そして文字列をC#のコードとして動かす為にもAdd-Type呼び出すなどと面倒なことをしなきゃならん。 >>860
まったくもってその通りで C#>PowerSell だよ
もっと書くと
C# > PowerSell >>>>>>>>> VBA
だけど
なんで唐突にC#と比べはじめちゃったの? 向こうでもVSCodeやらIDE入れたら〜ってレスしてるやついるけどさ
VBAを主に使うのは事務屋
↓
事務の職場は(開発系と違って)外部ソフトの導入を渋られる所が多い
↓
結局Windows付属の
・VBA
・VBS
・cmd
・PowerShell
しか使えない
↓
エクセルにあまり関わらない処理はPowerShellでやってもいいんじゃね
って感じだと思うの
(というか、現にウチがこれ)
この、VBA(VB6)かPowerShell「しか」手段がない前提で行けば、
C#のソース読み込むとか多少歪んだ使い方だとしてもVBAよりPowerShellを使いたくなる時があるのは理解できるだろ?
もちろんVBAもバリバリ使ってるけどな
なんでどちらかだけしか使う価値がない!!!みたいな話になってんだろ Add-Typeはメタプログラミングするときに便利 >>862
逆の話でね、こっちはず―っとそういうことを言ってるの。
その度にPowerShellしか価値が無いと言われてるんだよ。
ず―っと適材適所と言ってる。 >>865
VBAでスクレイピングだとか1ファイルで完結とか言っといて適材適所を主張してます!は頭おかしいんじゃねえの? >>861
全くその通りじゃね―んだよ。
VisualStudioが入って無い、もしくは入れられない環境ではC#は意味がねえ。
だから適材適所なんだよ。
大体、PowerShellがVBAに勝てるわけねえんだよ。
VBAが使われる環境ではVBA>>>PowerShellだし。
PowerEellが使われる環境ではPowerShell>>>VBAだろう。
噛み合わねえんだよ。 >>866
1ファイルになるのはExcelの環境だからだろ。
そういう土俵(環境)なんだからVBAが有利なのは仕方無いだろ。
スクレイピングもExcelブックにデータを展開するのが前提だぞ。
そうじゃなかったらVBAでやるべきじゃない。 汎用的な開発だったら何でVBAでやるんだよ。
そりゃアホだろ。
VBAの議論をするならExcelの環境が大前提なんだから他の言語はそれに合わせなければならない。
だから他言語は不利になるのあたり前の話。
こういう話は当然PowerShellにもあるわけで、だから適材適所なわけ。 >>867
噛み合わないのはお前の理解力と日本語能力のせいでは??
正直なんでいきなり演説かましてんだこいつって感じだぞ 1ファイルになるのがメリットみたいな言い分が謎
逆にデメリットだろそれは
ファイル分けて管理したほうが開発しやすいだろ常識的に考えて
最終的に配布を1ファイルにしたいならJSみたいにバンドルすりゃいいだけだし
なんならワンライナーのオンラインインストーラーでもいい >>871
> ファイル分けて管理したほうが開発しやすいだろ常識的に考えて
それは開発側の都合でしかない
そんな事を意識しない利用者にとっては単一ファイルの方がいいのは当たり前
> なんならワンライナーのオンラインインストーラーでもいい
インストールとかバカすぎる w ちっちゃな事で荒れるな。
IT土方同士仲良くしろ。 >>872
脊髄反射でレスしないで読んでから返せない?
ユーザー都合で1ファイルがいいなら、1ファイルにバンドルすりゃいいだろ、って読めなかった?
インストールがダメってのも意味不明だな
ユーザー目線ならそれこそ何ファイルだろうがツールとして使えれば良いのだから、インストールスクリプトは有力な選択肢になる
1ファイルが良いってのもそもそもお前の思い込みでしかなくて、世の中には複数ファイルのツールのほうが遥かに多く、利用されてる
ユーザーは結果として簡単に使えればそんなことは気にしないんだよ >>874
VBAでバンドルとやらをどうやるつもりなのか書いてみ
> ユーザーは結果として簡単に使えれば
って豪語するんだから今のExcelファイル単体並に簡単に使えるんだよな w >>874
1ファイルにバンドル?
ExcelブックにPS1をバンドルしてどうするんだ?
個別に動かすの?
それじゃ1ファイルの意味ねーだろ。
第一、VBAは面倒とか言ってたのにそういう面倒なことするの?
Excelブックを渡した相手に余計な何かをインストールさせるのか。
VBAならそんなこと丸っきり必要ないのに。
インストールしなくても同じことが出来るならインストールしなきゃならんのはどう見てもデメリット。
世の中はExcelブックと他に何か別のファイルを持ち歩くのが遥かに多いとか、バカ過ぎるだろ。
ユーザーは簡単に使えれば中のコードがどうとか何の言語とかは優先度が低い。
Excelが前提のVBA批判をしてる自覚ある?
世の中には複数ファイルのツールってExcelの何?
なんか、ひとりよがりに感じるな。 適材適所とか言っておいてこれだよ
どんな場所でもVBAが適材になると思ってるらしい 日本語が通じないのが一番困るねぇ
なんでエクセルにpsをバンドルするって話にすり変わってんだよ
開発は複数のPs1でやって配布は1つのps1にバンドルしてやるって話だろが excel自体が適材じゃないから
ありとあらゆるものがexcelだから ファイル渡すだけ
インストールワンライナーをコピペしてシェル叩くだけ
あるいは1つのインストールスクリプトをダウンロードして実行するだけ
どっちも初回の手間は大して変わらんだろう
でも、エクセルファイル渡しは後々のバージョン管理で混乱するから、総合的に見てインストールのほうが楽だね エクセルは他のもの要らないんだー
↓
見つからない参照
鉄板あるあるネタwww
psはライブラリなければセントラルリポジトリからとってくるだけなのでこんなアホな目に合わんで済む ライブラリなんて使うからそうなる
全部自分で1から書き上げるか、歴史ある秘伝の自作ソースをコピペすれば事足りる
工夫で乗り切れるのだ
らしいっすよ? >>877
だから話の流れを読め。
Excel限定のVBAの話から始まっている。
どんな場所でもでは無い。
Excel限定だ。
元々の>>871が既にExcel限定を考慮せずにおかしなことになってる。
>>878
そうとも限らない場合もあるけど基本的にはその通り。
それに対してどんな場合でもVBAはダメっていう主張が有って、VBA側はそれに反論してる。 >>881
その手間が既に面倒くさいだろ。
しかもブック開いてるのに別スクリプトも動かすのか?
めんどうだわ。 >>882
そもそも基本的にMicrosoft謹製以外は使用NGが普通だぞ。
ライブラリのコードを全て把握してるとか自社で作成したものなら別だが。 >>885
Excelにくっついてくるソルバーアドイン使うのでさえ
オプションクリックしてアドインクリックして有効なアドインクリックしてチェックボックスクリックして…
とかやるのよりよっぽど簡単 >>887
???
既にそんな設定は済んでいるが。 >>884
Excelありきの話ならVBAスレでバトルしてこい
ここはPowerShellスレでPowerShellはなんでもできるオールラウンダーだ
PSerは心が広いからExcelコントロールの話をするなということはない
だがExcelの話題で縛れというなら流石に付き合う理由はない
繰り返す
Excelありきの話ならVBAスレでやれ >>889
そうなんだよな。
本当は長居するつもりも無かったんだが
頓珍漢なレスが多くて反応して今に至ってる。 元々VBAスレがPowerShell信者に荒らされてな。
そのままスレが最後までいって次が立つまでの間にこっちに書いたらこうなった。 >>888
お前が済んでたらファイル渡されたユーザーも参照できんのかよ C#は.NET無い環境だとブレークポイントで止めながらデバッグとか出来ないってことでいいのでしょうか? >>895
Visual Studioでした。すみません。 >>896
omnisharp
これ以上は適切なスレで Add-TypeでC#をコンパイルしてアセンブリを吐き出すことってできない?
cscをつかうかCodeDOMをつかうっきゃないか >>898
そこまできたら普通にRoslyn使えよ… 日本語環境でUpdate-Helpが成功した方いますか? 「Write-Host $Args[0]」とだけ書いたスクリプトを、コマンドプロンプトから
「powershell ./test.ps1 "(笑)"」
と呼び出すと「CommandNotFoundException」が発生します。
括弧が悪いようですが、やっぱり渡す前に「"`(笑`)"」みたいにバッククォートで括弧をエスケープするしかないんですかね?
実際は引数に何が来るかわからないので、できればPowerShell側でなんとかしたいんですが。 >>902
powershell -file ./test.ps1 "(笑)" >>905
店名は「笑」と書いてショウと読むのに対し,
「(笑)」は「(笑い)」の省略されたものなのでワラもしくはワライと読むはずなので,
その画像は不適切 >>906
いや、そもそもスレチなんでまともに相手しないであげて下さいw
ところでPowershellで何かわからないことあってググると
大体「http://mtgpowershell.blogspot.com/」のサイトがヒットすることが多いんだけど
このサイト運営してる人ってすごく頭がいいんだろうなあ >>907
ネタにマジレスするっていうネタやで
俺もそのサイトは度々参考にさせてもらってるわ
http://tech.guitarrapc.com/archive/category/PowerShell
↑このサイトもおすすめ。「PowerShell実践ガイドブック」の作者。 >>905
>>906
麺屋側は商売だから
とくに「ワラ」とか
ネットスラングまんまの店名つけるわけない >>909
俺が悪かったのでもうスレチにマジレスは勘弁して下さい。(^_^;)
>>908
Powershellの書籍まで出してる人のサイトか、すごいですね。
使えるTIPSあるかひと通り見てみますね。 さすがに空白区切りの項目を$3とかで参照できないよな
awkが特殊すぎるか 特化された言語と比べなければ十分シンプルかな
cat $1 | % { $a = -split $_; $a[3] + $a[2] }
変数への代入が少しやぼったく感じる ふむふむ、笑は「わら」って読まないのか…
1つ勉強になったわ
笑笑店主 >>889
「PowerShellは何でもできる」は嘘。
お前は死んでいい。つーか死ね。
PoewerShellやっても背は伸びなかったし、彼女出来なかったし、宝くじにも当たらなかったわ!!!!
まぁそれは冗談として。
「何でも」ってのは流石に撤回しろよ。
あ、俺は >>884 ではない。 PowerShellで赤ちゃんできました、ありがとうございます!! >>914
> PoewerShellやっても背は伸びなかったし、彼女出来なかったし、宝くじにも当たらなかったわ!!!!
それパチモンやん PqewrShellを飲んで二か月です。
アソコビンビンで妻も満足です。
こう? 蜆ってしじみのことか
PowerShell…米国の製薬会社で開発された貝のサプリかな Powershellやりはじめたら台風被害にあったよ><
家の前の自転車が倒れただけだけど PowerShell Core 6.x (以下 PS6) を導入した環境でスクリプトを実行する際、
実行環境を容易に 旧来の PowerShell 5 (以下 PS5)、PS6 とで
切り替える方法ってありますか?
モジュールの関係で PS5 でないと動作しないものもあるので、こっちのスクリプトは
PS5 で動かしたい、ほかは PS6 で、って感じで混在してます。
海外のスレッドでは、拡張子「.ps6」を独自に追加してそれで切り替えれば?みたいな
回答が出てましたけど、汎用性に欠けるのであんまりそういうことはしたくないんです。
Linux みたいに shebang 行で切り替えられれば一番なんですけど。
なにかアイディア無いですか? 一行目読み取ってどっちを起動するか切り替える実行ファイルつくればいいやん 切り替えるってのがよく分からん
そもそもps1ファイル自体は実行しても何も起こらないんじゃなかったっけ そりゃスクリプトはテキストファイルだから実行形式じゃないよ
画像ビューアにコマンドライン引数で画像パス渡せば画像が開くでしょ
スクリプトの実行はそれと同じことやってるの
なんでプログラム板でこんなこと説明しないといけないんだ いやだからさ
実行元がpwshとpowershellで明確に違うのに何を切り替えるのか分からんのよ 拡張子の関連付け問題の話?
バ―ジョンチェックとどちらで起動するかのリストを持ってる振り分けアプリ作って、.ps1への関連付けをそれにするとか。 実行された環境がPS6だったら自身をPS5で実行して終了するスクリプトを
PS5で実行したいファイルの頭に書いておけばいいんじゃね 例えば、Active Directory 管理用モジュール「ActiveDirectory」は、現状
powershell.exe でしか動かず、pwsh.exe ではインポートできないわけ。
--------
参考
https://docs.microsoft.com/ja-jp/powershell/scripting/whats-new/breaking-changes-ps6?view=powershell-6
PowerShell スナップインは、PowerShell モジュールの前身ですが、PowerShell コミュニティではあまり使用されていません。
-- snip --
現時点では、Windows および Windows Server 内の ActiveDirectory および DnsClient モジュールに影響します。
--------
というわけで、今俺が作ってるものだと、以下のものが混在してる。
イ)powershell.exe でしか動かない
ロ)pwsh.exe でしか動かない
ハ)どっちでも動く
で、〜.ps1 ファイルを実行する際に、右クリックして「PowerShell で実行」とすると、何もしなければ powershell.exe で
実行される。自分が作ったものはほとんどが(ハ)なんだけど、時々(ロ)もあって、それを実行するときは右クリックして「PowerShell で実行」が出来ないんで面倒。
今検討してるのは、
a) pwsh.exe でしか動かないものは拡張子を .ps6 でにして、Windows に ps6 を pwsh.exe に関連付ける
b) sendto フォルダに pwsh.exe で実行させるバッチファイルを置く
c) バッチファイル (〜.cmd) に、実行環境ごと書いてしまう (参考 http://d.hatena.ne.jp/hake/20180218/p1 )
なんだけど、ほかにやりよう無いかね。 UNIXシェルのシバンみたいのが理想なら>>928は現実的な最適解だと思うんだけど何故スルー? そんだけならコンテキストメニューを拡張して
「PSV5で実行」を追加すれば良くね 右クリックなら選べるからコンテキストメニューをどうにかすべきだな。
ダブルクリックの話かと思ってた。 >>930
環境の問題とプログラム自体を分けておきたいとかあるんじゃないの? >>928
イメージとしてはこんな感じかな。たしかにうまくいきそう。
ありがとう、明日試してみる。
-----------
<# ps1 の関連付けが powershell.exe の状態 (デフォルト) で、pwsh.exe で実行させたいものの場合 #>
# 実行環境が ver 5 以下の場合
if ($PSVersionTable.PSVersion.Major -le 5) {
pwsh.exe $MyInvocation.MyCommand.Path
exit
}
# 以下、ver 6 以上で実行させたい内容 >>931 >>932
もちろんそれでも十分可能なんだけど、以下の理由でできればカスタマイズは避けたいんです。スクリプト内だけで完結させたい。
・マシンがたくさん、OS も複数種類、ユーザプロファイルもたくさんあるので、標準構成からあまりいじりたくない
・お客さんに納品する可能性も考慮 運用マニュアルなしで議論してもしょうがないでしょ
このスクリプトはver5環境で実行してくださいと一言書いとけば済む話 そういう能書きが書いてあっても何のこっちゃ分からんという人に配布しなきゃいけない場合もあるからなぁ
お客さんに運用対応を要求するのも大変なことだし >>937はこの手の仕事したことないんだろ
マニュアル書いても
「ver5環境ってなんだ?」
とか、そもそも説明なんて読んでなくて
「うまく動かないので至急なんとかしてください」
って言われるだけのこと これで十分
#Requires -Version 5
if ($PSVersionTable.PSEdition -eq 'Core') {
throw 'Powershell Coreでは動作しません。'
} 「マニュアル?あぁ読んでないわ。とにかく直しといてね」 >>940
「なんか 動作しません て出るんだけど?直しといてね」 「対応するなら○○万円(鬱陶しい顧客リスク分を上乗せして)頂戴します。」
断るならブラック顧客だから切るべし。
断れないならブラック企業だから転職。 >>943
突っぱねるだけじゃなく、妥協点を見出す、Fail safe, Fool proof ってのも重要なことだよ。
まあ個人のポリシーだから好きにすればいいけど。 マニュアル書くにしたって、「エラーメッセージが出ます」と一言で説明するだけじゃ不十分
「『ver5環境では動作しません』というメッセージが表示されます。この場合...」と一字一句再現してやらないとわけわからなくなる人が山のようにいるのでね
ウィンドウの背景色やフレームの色まで画像付きで説明されてないと理解できない人もいるし
舐めてると死ぬぞ 会計ソフトを出したら、それを買った客が、簿記・会計処理のことを聞いてくるw
女が電話に出ると、何時間でも粘るw
そういう客もいる >>947
それ、チャンスじゃん。
サポート料を時間当たりいくらと決めとけば良い。 >>947
全然関係ないけど昔生理用品メーカーに納入した機器の入れ替えに行った時に聞いた話だと、お客さんからの問い合わせ(多分クレーム)で長い時は3時間とかかかるって言ってた 結局こんなふうにしたよ
https://pastebin.com/9RWLpSC7
>>928
ありがとうごさいました!
ほかの皆さんもありがとうございました! powershellにはbuild toolないのか >>954
PowerShellでWeb API作る需要あるのかな >>956
自分の場合だけど、Windows の EC2 インスタンスと連携するプログラムを Lambda 上で
作る案件がちょくちょくあって、これまでは Windows 上は PowerShell、Lambda のほうは
P{ython で作ることが多かった。
だけど自分のスキルのせいもあって、PowerShell と Python のコーディングを同時並行で進めると
色々と混乱することが少なくなかったのね。
# 両方 Python で作れば、と思うかもしれんけど、運用の手間を考えると、
# 追加でインストールするものはなるべく少なくしたい
それが、Lambda で PowerShell Core が使えるなら PowerShell で統一できるので、
個人的にすごく捗るな、と。 class構文じゃなくて本物の型を定義したい場合にはAdd-Typeしかないのかな
GUI作るときにPSObjectがうまくデータバインドできなくて困った https://news.mynavi.jp/itsearch/article/hardware/4054
Powershell6.1で大分パフォーマンス上がったみたいね
パフォーマンス以外に起動も結構早くなった感じ Macだからかもしれない
Macでの実行環境は最適化する余地が大きく残ってたとかがあり得る
Windowsでどうかは比較してみないとなんとも psわざわざ入れるって無理だな
有り物使うだけだからOSアプデで付くのを待つしかない PowershellはOSによってプリインストールバージョン違うの地味に面倒だな
MS Updateで5.0までは強制的にアップデートしてくれないかな
客先のサーバでSQLモジュールも入って無くてInstall-moduleも入って無くてスクリプト使えなくて困ったわ 2.0ベースでなんとかするテクニックは必須ですよね テクニックって程のものって何かある?
使える使えないの差ぐらいじゃないの 再来年1月にはPowershell2.0プリインストール環境が終了するから2.0に合わせた書き方頑張る気力がイマイチ
Windows7とか2008R2は早く死んでくれないかな Windows7とか2008R2は最後のまともなバージョン >>967
SP1入れずに使ってる環境なんてほぼ無いだろ?なら4.0覚えときゃOK
個人的にはzipクラスがある4.5が望ましい とりあえず3.0以降じゃないとちょっと辛いイメージ 3.0以降じゃないとPsCustomObject使えないとか、コマンドレット充実してなくてNETライブラリ使う羽目になって、もうこれC#で書いたほうが良くね?になるあたりかね coreに移行して大分経ってからGet-ScheduledTaskとかのWindows専用っぽいコマンドレット無くなってるのに気付いた
まあこれはあんまり使わんしpowershell.exeで実行すりゃいいか where-objectでフィルタをかける時、複数条件が必要な場合は
パイプでつなぐしかないですかね?andとかあればいいんですけど
where-object 条件1 | where-object 条件2 論理演算子はもちろんあります
-and -orなど >>975
サンプルだと
? {$arg -eq "test" -or $arg2 -eq "test"}
みたいな感じ
-使う演算子が繋がって違和感あるかもしれんけど そもそもカンマでcriteraの文字列を区切ればor指定になるのでは >>978
どゆこと?
$arg -eq "test1","test2"
とかやってもならないけど パワーシェル内でパワーシェルを呼び出す時、どのパワーシェルの処理が成功してるか失敗してるかわかるようにログ出すのはどうすればいいんでしょうか? argsでIDを渡すとか
powershell -command { "ID: $($args[0])"} -args 777 バッチファイルみたいにリダイレクトではログ渡せないのかな?
2>1
みたいなかんじで? $?で前回のコマンドの実行結果
$lastexitcodeにexitコマンドで返された値が入る(呼び出したスクリプトはexitに戻り値を付けて終了させないとダメ)
$?だとスクリプト内の最後のコマンドの結果が帰るからスクリプトの作りによっては失敗の判定は出来ないのはバッチとかと一緒 なるほど
呼び出すスクリプト内にエラーコードで正常か異常か$?で判定させてそれをifかなんかで分岐させてエラーコードを呼び出し元のスクリプトの$lastexitcodeをehcoする感じですかね? >>980
成否判定ならこれでよくね
hoge.ps1
$hoge = $true
if($hoge){exit 1}
exit 0
-------------
$ps = Start-Process hoge.ps1 -Wait -PassThru
switch($ps.ExitCode) {
0 {
"失敗"
}
1 {
"成功"
}
} これを呼び出すスクリプト全部に書くってこと?
呼び出し元と先が複数あって、先を全部修正するのが大変なので出来れば元だけで完結させたい
が、無理そうなのでこれを全てに書いていく? >>990
0で戻ってきたらokにでもすれば
いじらんで良いやろ >>990
exitで成否を戻した方がしっかり判定できる
呼び出したスクリプトで何が発生したら失敗とするかをしっかり判定しないの?
結果コードでの判定とか曖昧すぎてトラブルの元と思う >>984
実際にやりたいことがわからないけどエラーメッセージをリダイレクトするだけなら同じようにできるよ
powershell ./hoge.ps1 2>>log.txt >>979
知らないけど、switch 文で、カンマを使うとか?
そういう意味じゃないの? >>979
-inならいけるけど、まあ違うんだろうな
dir | where { $_.name -in "a1.txt","a2.txt","b1.txt" }
$list = @( "a1.txt","a2.txt","b1.txt" )
dir | where { $_.name -in $list } >>979
適当こいただけじゃないのかな
PSのカンマ演算子は配列を作り、配列の要素が複数なら内容問わず真になる
そもそもカンマでの結合はORなのかANDなのか意図が曖昧
仕様としても微妙だしバッドプラクティスに思える >>997
乙
前に同じ名前のスレが落ちてたけどこの板は保守が要るってことかな? (1..1000 |% {if ($_ -eq 1000) {write-output "1000 complete!"} else { write-output $_}}) -join " " このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 682日 15時間 1分 1秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。