【最強CUI】PowerShell -Part 2 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
>>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」とかいう寝言は取り下げた方がいい。誤解を招く。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる