20/06/05 01:16:33.38 amrr7gLk.net
URLリンク(heetnote.com)
ここで公開されているスクリプトを自分なりに書き換えて使っているのですが、
FakeAacWavをfre:ac1.11に置き換えるとWrite-Hostで表示される日本語が全て文字化けするようになってしまいました。
以前はfre:ac0.9を使っていたのですが、その時は文字化けしませんでした。
処理開始時点では日本語は正常に表示されるのですが、fre:acの処理が始まると同時に、正常に表示されていたものも含めて
全ての日本語が「□□□」に置き換わるようになります。
多分ですが文字コードの問題ではないようです。ソフト側の問題であってどうしようもないものでしょうか?
312:デフォルトの名無しさん
20/06/05 06:07:06.84 Trob9zBU.net
コマンドラインに その① を張り付けると その だけになるの困る
なぜか ① 単独で張り付けると ① が入るのが謎
①あ①あ だと ①ああ だったりもう……
313:デフォルトの名無しさん
20/06/05 08:46:16.13 S6jGROW/.net
>>311
外部コマンド(*.exe)の出力が起因する問題なのであれば、
「& ~~」で同一のコンソール内で実行するのではなく、
「Start-Process ~~~」で実行してみてはどうでしょう。
Start-Process の場合は新しいコマンドプロンプトのウィンドウが開いて、
そこで実行されます。
314:デフォルトの名無しさん
20/06/05 15:49:55 amrr7gLk.net
>>313
ありがとうございます。試行錯誤しているのですがStart-Processでfre:acが起動しません…
Start-Process -FilePath (fre:acのパス。""で囲む) -ArgumentList (fre:acの引数。""で囲む)
…で書式は合ってますよね?
315:デフォルトの名無しさん
20/06/05 16:56:17.03 S6jGROW/.net
>>314
CLI の外部コマンドは ※ 上で実行しますので、Start-Process で起動するのは
あくまでも ※ です。ですので、引数として CLI の外部コマンドを指定するといいと思います。
こんなかんじですかね。
URLリンク(pastebin.com)
※ コード内の文字列が5ちゃんの NG ワードになっていて書き込めないので、Pastebin にしました
316:デフォルトの名無しさん
20/06/05 17:15:12.53 O//h2yE5.net
初心者です。
あるlogフアイルの1行目を新しいlogファイルに書き出し、
続けて同じlogファイルから特定の文字列で検索した結果を上書きしたいのですが、
具体的には
Get-Content C:\test\stdout.log -totalcount 1 > C:\test\stdout_bk.log
Select-String -Path C:\test\stdout.log -Pattern 2020/0 -Encoding default >> C:\test\stdout_bk.log
こう書いてしまうとstdout_bk.log ファイルの2行目が改行してしまいます。
(3行目からSelect-String の結果がかき出される)
stdout_bk.log ファイルの2行目からSelect-String の結果をかき出したいのですが
どうすればいいでしょうか。また処理全体を2行に分けるのではなく
できたら1行にまとめたいのですが、可能でしょうか。
317:デフォルトの名無しさん
20/06/05 17:50:49.18 Trob9zBU.net
>>316
これであってる?
Get-Content C:\test\stdout.log | & { Begin { $header = $true } Process { if ($header) { $_; $header = $false } elseif ($_ -match '2020/0') { $_ } } > C:\test\stdout_bk.log
318:デフォルトの名無しさん
20/06/05 17:53:48.63 amrr7gLk.net
>>315
丁寧な解説ありがとうございます。しかしうまくいかない…。
ひょっとして外部コマンドになるので引数にPowerShellの変数を使用できないですか? こんな感じですが↓
Start-Process "一部省略" -ArgumentList ("/c","freacのパス","-e sndfile-wave -d $OutputDir $AacItem.FullName")
319:デフォルトの名無しさん
20/06/05 18:06:39 S6jGROW/.net
>>318
$AacItem.FullName を「"」で囲っても、$AacItem のプロパティ FullName は取り出せないです。
いろんなやり方があると思いますけど、私は「-f」を使うやり方が好みです。
Start-Process "一部省略" -ArgumentList ("/c","freacのパス",("-e sndfile-wave -d $OutputDir {0}" -f $AacItem.FullName))
でもこっちのほうが良さそうですね。
Start-Process "一部省略" -ArgumentList ("/c","freacのパス","-e","sndfile-wave","-d",$OutputDir,$AacItem.FullName)
320:デフォルトの名無しさん
20/06/05 18:11:37 S6jGROW/.net
>>318
$OutputDir や $AacItem.FullName にスペースが含まれてると失敗するかもしれませんので、その場合はこうでしょうか。
Start-Process "一部省略" -ArgumentList ("/c freacのパス -e sndfile-wave -d '{0}' '{1}'" -f $OutputDir,$AacItem.FullName)
321:デフォルトの名無しさん
20/06/05 18:22:39 O//h2yE5.net
>>317
}を1個つけると意図する結果が出力されました
ありがとうございました。
復習します。
322:デフォルトの名無しさん
20/06/05 18:52:19 O//h2yE5.net
>>317
すみません、よろしければ少し解説いただけないでしょうか
$_の使い方がいまいち理解できません。
323:デフォルトの名無しさん
20/06/05 19:56:13.96 amrr7gLk.net
>>319
3つとも試してみましたが、どれも正常に動きませんでした…。
一番上は何も処理せずpowershellが終了してしまい、2番めと3番めは黒いウインドウが一瞬表示されるものの
freacは何も処理せず次に進んでしまいました。
{0}と-fは
URLリンク(yanor.net)
ここの一番上で解説されているものでしょうか。
324:デフォルトの名無しさん
20/06/05 20:50:39.26 Trob9zBU.net
>>322
Processブロックでは $_ に各行が入ってくるので必要な時だけ出力しました
$_の扱いはForEach-Objectと同じなので、そちらでたくさん例が見つかるでしょう
>>323
Windows限定かもしれませんが、コマンドラインで
prog arg1 arg2 arg3
と起動するプログラムならこれでいい気がします
Start-Process "prog" -ArgumentList @('arg1 arg2 arg3')
325:デフォルトの名無しさん
20/06/05 21:15:18.94 Trob9zBU.net
例をつけ忘れました。こんな感じ。
Start-Process 'pwsh' -ArgumentList @('-nop -c "1 .. 3 | % { $_; Start-Sleep 1 }"')
326:デフォルトの名無しさん
20/06/05 21:44:06.19 amrr7gLk.net
Start-Process "freacのパス" -ArgumentList @('-e sndfile-wave -d $OutputDir $AacItem.FullName')
単純にこれではダメでした。
327:デフォルトの名無しさん
20/06/05 22:10:21.57 Trob9zBU.net
そりゃもちろんこうしないと
$args = '-e sndfile-wave -d {0} {1}' -f $OutputDir, $AacItem.FullName
Start-Process "freacのパス" -ArgumentList @($args)
328:デフォルトの名無しさん
20/06/05 22:12:15.54 Trob9zBU.net
ってこれ >>320 に空白考慮版があるね
329:デフォルトの名無しさん
20/06/05 22:17:17.85 Trob9zBU.net
と思ったけど >>320 は必要ないcmd(?)経由に失敗してる?
330:デフォルトの名無しさん
20/06/05 23:21:02.62 C2qeZTUp.net
>>324
もう一つご教示ください。
header変数はどこで定義されている(という表現が適切か判りませんが)か教えていただけないでしょうか
331:デフォルトの名無しさん
20/06/05 23:41:51.74 e4Todh9J.net
>>317
の、Begin { $header = $true }
Begin 節で、header という変数を定義して、初期値をtrue にしてるのでは?
332:デフォルトの名無しさん
20/06/05 23:44:42.07 C2qeZTUp.net
ありがとうございます。
理解できてない。無知をさらけ出してしまいました。
333:デフォルトの名無しさん
20/06/06 00:12:58.72 7YMZq5d4.net
>>312
①、つまり丸囲みの1 は、CP932 だけの環境依存文字だろ。
UTF-8 で使えるのかどうか、不明
ひょっとして、ファイル名に、半角英数字以外を使っているのか?
ファイル名・ユーザー名みたいなシステムに、半角英数字以外を使ったら、ダメ!
334:326
20/06/06 00:36:27.86 YeDbVwYY.net
>>372
すみません、それも結果は同じでした。
ここまで色々出していただいた記述例を全て試しても結果は同じで、cmdのウインドウは一瞬出るがfreacは何もせず終了という状態です。
プログラムに触るのが初めてというレベルの初心者で、ここで教えてもらったことを丸写しするくらいしかできないですか、
このままこの話題続けても大丈夫ですか? 大分長いこと占領していて申し訳ないのですが。
335:デフォルトの名無しさん
20/06/06 01:43:36 7YMZq5d4.net
Powershell で文字コードを変更する(clip.exe へのリダイレクトもね)
URLリンク(www.vwnet.jp)
「powershell 文字コード 変換」で検索!
本当は、込み入った処理は、Ruby でやって、
Powershell・コマンドプロンプトは、 起動部分だけの単純なものにすべき!
こういうシェルで、ややこしいプログラミングは無理
336:デフォルトの名無しさん
20/06/06 07:05:00.74 +ifRGkAL.net
>>312
>>251-254 のバグとは別かな?
337:デフォルトの名無しさん
20/06/06 07:07:30 3KBpE/OI.net
>>334
ようするに
$OutputDir = どこそこ
foreach ($InputItem in $Args) {
というループの中に
$AacItemList = Get-ChildItem 以下略
foreach ($AacItem in $AacItemList) {
というループがあって
& $fawclPath $AacItem.FullName
を書き換えて >>318 のようにしたいって理解であってますか?
なら $args を書き換えて使っちゃだめですし、
Start-Process も -Wait を付けた方が良さそうなんで
Start-Process 'freacのパス' -ArgumentList @('-e sndfile-wave -d "{0}" "{1}"' -f $OutputDir, $AacItem.FullName) -Wait
じゃないかな
338:デフォルトの名無しさん
20/06/06 07:08:59 3KBpE/OI.net
>>336
それだ!
でもPSReadLineなしでは不便過ぎる……
339:デフォルトの名無しさん
20/06/06 09:15:40.96 hmicP46W.net
PowerShellで多重ループが許されるのは小学生までだよね
340:319
20/06/06 09:23:51.93 2MzuylRm.net
>>323
こちらでも freac を入手して試したところ、>>319 のとおりで動作してます。
私は以下のようにして実行してみました。freac は ZIP で配布されていたものです。
※5ちゃんのNGワードに引っかかりまくって全く書き込みが出来ないため、コードは全て以下の Pastebin に記載しています
URLリンク(pastebin.com)
# パラメータ
# 例1
実際に試したところ、freac は ※ 経由でなくても動作しますね。
# 例2
【切り分け】
Start-Process で外部の CLI コマンドを実行した場合、終了後にウィンドウが
閉じられるので切り分けが難しくなります。
そこで、「-NoNewWindow」オプションを付けて実行してみてください。
freac (又は※) が出力するエラーが、PowerShell のコンソールに表示されるはずです。
# 例3
# 例4
【-f について】
{0} と -f に関してはご指摘のとおりです。
341:デフォルトの名無しさん
20/06/06 10:08:38 B/uunGh7.net
>>333
横レスだが、
> ?、つまり丸囲みの1 は、CP932 だけの環境依存文字だろ。
> UTF-8 で使えるのかどうか、不明
UTF-8というか、Unicodeには、一般的に使われている全ての
文字コードの全ての文字が含まれている。だから、Unicodeと呼ばれる。
> ひょっとして、ファイル名に、半角英数字以外を使っているのか?
> ファイル名・ユーザー名みたいなシステムに、半角英数字以外を使ったら、ダメ!
それはNEETの発想だ。職場の共有ファイル、取引先とやりとりする
ファイル等、一般社会では、ガチガチにファイル名のルールが規定
されていて自分勝手に決められない場合が多いのだよ。
342:デフォルトの名無しさん
20/06/06 10:17:39.94 3KBpE/OI.net
>>340
端末設定を変えられて文字化けするから Start-Process させるんでしょ
-NoNewWindow で端末共有させたらエラーメッセージも化けてるんじゃ……
Start-Process のパラメーターを画面出力して Start-Process せずに exit
出力されたパラメーターが正しいか確認……かな
それをスレに貼ってもらえれば即解決な気がする
343:319
20/06/06 10:55:21.17 2MzuylRm.net
>>323
すみません、これまでの Start-Process の例では「-Wait」オプションが抜けていました。
そのうえで、>>342 の指摘も考慮して以下の通り3パターンでテストしてみました。
URLリンク(pastebin.com)
test1.ps1
Start-Process を使用するバージョン(-NoNewWindow 無し)
test2.ps1
Start-Process を使用するバージョン(-NoNewWindow 有り)
test3.ps1
オリジナルに近いバージョン(外部コマンドを「&」で実行)'
結果は以下の通りです。
URLリンク(i.imgur.com)
test1.ps1、test2.ps1 が動作するのは想定どおりなのですが、test3.ps1 でも文字化けしてないんですよね・・・。
これまで「外部コマンドを Start-Process で別ウィンドウで実行すれば文字化けしない」という前提で
話を進めてきましたが、まったく関係なかったかも知れません。
344:デフォルトの名無しさん
20/06/06 11:30:16 7wZTkIMZ.net
外部コマンドの出力をpowershell側で触ったら文字化けするって話してるなら
最初にコンソール出力時のエンコーディング設定変えて
$defaultEncoding,[Console]::OutputEncoding = [Console]::OutputEncoding,[Text.Encodi ng]::UTF8
最後に戻してやればいいんじゃない
[console]::OutputEncoding = $defaultEncoding
345:デフォルトの名無しさん
20/06/06 13:53:01 3KBpE/OI.net
ちょっと話が脇にそれるんだけど……
あれ?
>>311 を読んで「表示済みの文字まで化ける」謎現象だと思ってたけど
「正常表示できてた文字を、新しく出力すると化ける」だけなの?
化けるのがコンソールアプリの出力だけで、PowerShellのその後の出力は正常なら
端末の受け入れるエンコーディングが変更されただけかも
出力関係のエンコーディングは
(a) コンソールアプリの出力を PowerShell がパイプなり代入なりで受け取る場合のエンコーディング (PowerShellが持ってる)
(b) 端末が受け入れるエンコーディング (端末が持ってる)
があって、PowerShell自身は勝手に(b)に合わせて出力するから化けない
コンソールアプリの出力は、PowerShellに食われる時は、(a)なら正常、違えば化ける
食われず直接端末に出力する時は、(b)なら正常、違えば化ける
コンソールアプリに(b)だけ変更されたのなら(a)に再設定すればいい
[console]::OutputEncoding を設定すると(a)と(b)の両方が設定される
(a)は [console]::OutputEncoding だから
[console]::OutputEncoding = [console]::OutputEncoding
すれば十分な気がする
346:326
20/06/06 13:53:57 YeDbVwYY.net
色々ありがとうございます。
まず結論ですが、>>344さんの方法で文字化けは一応治りました。
ただ、最初の行に
$defaultEncoding,[Console]::OutputEncoding = [Console]::OutputEncoding,[Text.Encodi ng]::UTF8
を記述すると
[console]::OutputEncoding = $defaultEncoding
が実行されるまで日本語が全て文字化けします。
なのでfreacが実行される行の上下をこれで挟むのが一応の解決方法でしょうか。
他の方々の書き込みですが、まずStart-Processに-waitをを付ける方法では完全に動作が停止して次の処理に進みませんでした。
>>340さんの例3、4を試してみると、File Not Foundになります。
原因が気になるところではありますが、本末転倒なので>>344さんの方法でとりあえず解決したことにします。ありがとうございました。
347:デフォルトの名無しさん
20/06/06 16:15:55 3KBpE/OI.net
[console]::OutputEncodingの退避・復元で解決できるなら
退避なんかせずに freac(?) の実行直後に
[console]::OutputEncoding = [console]::OutputEncoding
入れるだけでいい気がするけど、もういいや
348:デフォルトの名無しさん
20/06/06 17:37:53.88 7YMZq5d4.net
書き込み禁止ワードは、何かのコマンドだろ
cmd.@exe, ls @-l
外人のアプリだから、アプリ内部で、文字コードをASCII に決め打ちしてるのかも。
でも、そのアプリは、起動したPowerShellが親だとすると、子プロセスになるから、
子プロセス内で環境を変えたとしても、親プロセスに伝播しないだろ
親プロセスで環境を指定したら、子プロセスにその環境は引き継がれるけど
それかそのアプリは、文字コードをバイナリにしてるとかで、
データを受け取る方がテキストで受け取ると、文字化けするとか
349:デフォルトの名無しさん
20/06/06 18:47:57.73 2MzuylRm.net
>>344
それ良いですね、勉強になります。
「俺専用ナレッジベース」にメモしときました。
350:デフォルトの名無しさん
20/06/09 16:01:29.47 DriXa/wG.net
rem ff.cmd
@echo off
setlocal
cmd /k "pwsh -File ".\firefox-shutdown.ps1""
# firefox-shutdown.ps1
Start-Sleep -Seconds 10;
Get-Command;
Start-Sleep -Seconds 3;
Get-Process firefox* | Stop-Process;
351:デフォルトの名無しさん
20/06/09 16:26:23 DriXa/wG.net
Start-Sleep -Seconds 10;
mspaint "010371104.gif";
Start-Sleep -Seconds 3;
Get-Process firefox* | Stop-Process;
352:300
20/06/11 17:55:09 fJWIdGby.net
教えてください。
ADユーザーの最新ログオン日時を取得したいです。
記述としては、
$Now = Get-Date -Format 'yyyyMMdd_hhmmss'
$logPath = Join-Path -Path ([Environment]::GetFolderPath("Desktop")) -ChildPath ('{0}.csv' -f $Now )
$users = Get-ADUser -Filter * -SearchBase " OU=ユーザー,DC=test,DC=local "
foreach ($user in $users) {
Write-Host ('{0} : ' -f $user.SamAccountName) -NoNewline
$grps = (Get-ADPrincipalGroupMembership -identity $user).name
$line = '"{0}",' -f $user.SamAccountName
$line = $line + ('"{0}",' -f $user.Enabled)
$line = $line + ('"{0}",' -f $user.LastLogon)
と思いましたが、最終ログオン日時を取得するのは
LastLogonであっているでしょうか?
また、最終ログイン日時の後にフルネームを取得したいときは、
$Now = Get-Date -Format 'yyyyMMdd_hhmmss'
$logPath = Join-Path -Path ([Environment]::GetFolderPath("Desktop")) -ChildPath ('{0}.csv' -f $Now )
$users = Get-ADUser -Filter * -SearchBase " OU=ユーザー,DC=test,DC=local "
foreach ($user in $users) {
Write-Host ('{0} : ' -f $user.SamAccountName) -NoNewline
$grps = (Get-ADPrincipalGroupMembership -identity $user).name
$line = '"{0}",' -f $user.SamAccountName
$line = $line + ('"{0}",' -f $user.Enabled)
$line = $line + ('"{0}",' -f $user.LastLogon)
$line = $line + ('"{0}",' -f $user.Fullname)
となるでしょうか?
353:デフォルトの名無しさん
20/06/12 09:35:33.43 IRe5SA+Y.net
v6.2.6
URLリンク(github.com)
v7.0.2
URLリンク(github.com)
354:デフォルトの名無しさん
20/06/12 10:07:01.73 tUTXhBxn.net
>>352
Get-ADUser は、デフォルトでは一部のプロパティしか取得しません。"LastLogon" が必要な場合は -Properties で指定する必要があります。
$users = Get-ADUser -Filter * -SearchBase "OU=ユーザー,DC=test,DC=local"
↓
$users = Get-ADUser -Filter * -SearchBase "OU=ユーザー,DC=test,DC=local" -Properties 'LastLogon'
さらに、LastLogon で取得される日時データはシリアル化されたものですのでヒューマンリーダブルに変換する必要があります。
$line = $line + ('"{0}",' -f $user.LastLogon)
↓
$date = [DateTime]::FromFileTime($user.LastLogon)
$line = $line + ('"{0}",' -f $date.ToString("yyyy/MM/dd HH:mm:ss"))
「フルネーム」ですが、プロパティとしては Name が該当するものになります。
$line = $line + ('"{0}",' -f $user.Fullname)
↓
$line = $line + ('"{0}",' -f $user.Name)
355:354
20/06/12 10:07:36.18 tUTXhBxn.net
まとめるとこうです(ファイル書き出しの部分は省略)。
$users = Get-ADUser -Filter * -SearchBase "OU=ユーザー,DC=test,DC=local" -Properties 'LastLogon'
foreach ($user in $users) {
Write-Host ('{0} : ' -f $user.SamAccountName) -NoNewline
$grps = (Get-ADPrincipalGroupMembership -identity $user).name
$line = '"{0}",' -f $user.SamAccountName
$line = $line + ('"{0}",' -f $user.Enabled)
$line = $line + ('"{0}",' -f $user.Name)
$date = [DateTime]::FromFileTime($user.LastLogon)
$line = $line + ('"{0}",' -f $date.ToString("yyyy/MM/dd HH:mm:ss"))
Write-Host $line
}
356:354
20/06/12 10:09:03.73 tUTXhBxn.net
ただし、私自身も 10 年くらい前に AD の情報から LastLogon を取得することを検証したのですが、以下の理由から断念しました。
・LastLogon のデータは各ドメコンが個別に保持しているデータなので、ドメコンが複数ある場合は各ドメコンごとに値が異なる
(各クライアントが認証要求を行ったドメコンでしか更新されず、各ドメコン間で同期されない)
・ユーザが PC でログオンしたタイミング以外でも、LastLogon は更新される (ログオフや長時間離席していた場合など)
正確なログオン日時が取りたい場合は、各クライアント上で取得する必要があります。イベントログを見れば分かります。
私は結局、ファイルサーバのテキストファイルにログオン日時とユーザ名を書き込むログオンスクリプトを作成したと記憶しています。
357:354
20/06/12 10:22:05.71 tUTXhBxn.net
追伸。
>・LastLogon のデータは各ドメコンが個別に保持しているデータなので、ドメコンが複数ある場合は各ドメコンごとに値が異なる
全てのドメコンから値を取得して、最も値の大きいものを採用する、というやり方も出来ます。
それでも、LastLogon がログオン操作以外でも更新されてしまうことには変わりませんので、確実に実行するならやはりログオンスクリプトをおすすめします。
358:デフォルトの名無しさん
20/06/12 16:10:21.89 6Yfh5mGy.net
Power Shellってアプリケーション作れんですか?
359:デフォルトの名無しさん
20/06/12 18:18:25.00 Jkz+gOtE.net
アプリケーションって何?
360:デフォルトの名無しさん
20/06/12 18:44:27.27 /dqGhWwV.net
>>358
普通に作れるよ
GUIもWPF使えるし
361:デフォルトの名無しさん
20/06/12 18:45:58.91 gCbNSmDh.net
window表示するイベントドリブンなexeのことじゃないかな
362:デフォルトの名無しさん
20/06/12 18:55:49.90 tr06rVi2.net
もうそれ最初からC#でやれば良くね?っていう
363:デフォルトの名無しさん
20/06/12 19:42:03.65 sTuFS1ZK.net
大部分C#で書いてパワシェで書きやすい部分だけデリゲートでインジェクションするパターンなら多用しとるわ
364:デフォルトの名無しさん
20/06/12 20:21:21.09 6LTYSgwt.net
ただのコマンドプロンプトだと思ってた
スゲーワケわからん
365:デフォルトの名無しさん
20/06/12 20:53:03.96 tSkvENox.net
オブジェクト指向シェル言語だからな
366:300
20/06/14 00:11:44.27 JXZUsp2d.net
>>354
ありがとうございます!
検証環境で無事出力確認できました!
しかし最終ログイン日時の取得は難しいんですね。
今回はそれほど精密な値は求められないので良かったですが、
ドメコンには注意なんですね。
367:デフォルトの名無しさん
20/06/15 19:20:43.36 KO8t20+1.net
ドメコンにリアルタイム性は期待できないと思ったがやっぱそうだよな
368:デフォルトの名無しさん
20/06/16 08:27:08.93 flP7FZNr.net
LastLogin を各DCから拾って最新値を取り出すスクリプトあったよ
URLリンク(gallery.technet.microsoft.com)
369:デフォルトの名無しさん
20/06/16 11:32:29.65 r0rBA9XG.net
コマンドプロンプトでecho a b cを実行すると出力結果は
a b c
PowerShellでecho a b cを実行すると
a
b
c
なのはなんで?
エラーにもならずにbやcはどう扱われてるの?
370:デフォルトの名無しさん
20/06/16 11:55:26.03 dJYiaODe.net
echo a b c
とかやってみれば、以下にcmdがクソかよくわかると思うよ。
371:デフォルトの名無しさん
20/06/16 11:56:36.32 dJYiaODe.net
あ、間のスペースも消えてなくなるのか。
echo___a_____b____c
_をスペースに。
372:デフォルトの名無しさん
20/06/16 12:32:39 0Yfa1k+l.net
いやいやいや
引数なんだから当然だろ
あとは出力で改行するかどうかだけじゃん
373:デフォルトの名無しさん
20/06/16 12:44:08.30 zfRgO9so.net
echo "a b c"
" " で囲えば、a b c
と表示される
374:デフォルトの名無しさん
20/06/16 12:53:01.50 r0rBA9XG.net
聞きたいのはそういう類じゃないんだな
echo (=Write-Output) のSyntaxが
Write-Output [-InputObject] <PSObject> [-NoEnumerate] [<CommonParameters>]
だからa が-InputObjectの<PSObject>になるのはわかる
bやcはどういう理屈で処理されるの?
375:デフォルトの名無しさん
20/06/16 14:16:42.05 PL2rwu//.net
>>374
echo a b c
は
echo @('a', 'b', 'c')
と同じ扱いとするように実装されてるんでしょ
376:デフォルトの名無しさん
20/06/16 14:40:34.28 p9YvTGLE.net
まあ調べた374がpowershellの引数展開についてまとめて分かりやすく報告してくれるでしょ
377:デフォルトの名無しさん
20/06/16 14:48:49.11 C/0BZ8DU.net
MSの説明では、正確には
[-InputObject] <PSObject[]>
となってる
378:デフォルトの名無しさん
20/06/16 16:42:16.77 r0rBA9XG.net
del a b cはちゃんとエラーになる
さっぱりわからん😩
379:デフォルトの名無しさん
20/06/16 17:12:01.69 MVe0R048.net
Write-Outputの-InputObjectパラメータにはValueFromRemainingArguments属性がついてるから
その場合はパラメータ名が明示されてないものはすべてInputObjectにバインドされるんよ
確認はしずらいけど以下で確認できる
(Get-Command Write-Output).ParameterSets[0].Parameters | where name -eq InputObject
まああんまりこの属性ついてるのはないからecho とかWrite-Hostあたりはこうなってるくらいの認識でいいよ
PowerShell7だとJoin-Pathもこの属性がついてる
380:デフォルトの名無しさん
20/06/16 17:24:04.82 8ZMUuPb8.net
echoの引数がUNIXとかだとアレだよ
381:デフォルトの名無しさん
20/06/16 17:25:39.53 MVe0R048.net
>>379
訂正:パラメータ名が明示されてないものでポジショナルバインディングもできないもの
382:デフォルトの名無しさん
20/06/16 17:45:58 r0rBA9XG.net
なるほど
ありがとう
383:デフォルトの名無しさん
20/06/16 19:16:29.09 bkoiHKSB.net
PowerShellの起動がなんか凄いモタつくんだけどおまかん?
Windows10Home PS7.01
スクリプト書いて渡しても、
何も出ない黒い画面がしばらく出て怖がられたり、何個も起動されたりするし
384:デフォルトの名無しさん
20/06/16 21:23:47.76 aR46ypRq.net
>>251,312
右クリックじゃなくてCtrl+Vではどう?
385:デフォルトの名無しさん
20/06/16 22:43:53.36 Tk9CpyzQ.net
cmd -L
9875 shinjyuku Tokyo Japan
の1列目を1行で変数に格納したいのですが、方法がわかりません。
$work=(cmd -L | Select-String "shinjyuku" )
$id=$work -split " "
Write-Output $work[1]
これを1行で書ける方法を教えてください。
よろしくお願いいたします。
386:デフォルトの名無しさん
20/06/16 23:40:23 n71ojSL1.net
cmd -Lが何なのか判らないのでcmd /c echoの例で
(cmd /c echo 9875 shinjyuku Tokyo Japan | %{ $_ -split " " })[0]
387:デフォルトの名無しさん
20/06/16 23:41:31 n71ojSL1.net
忘れてた頭に$id=付けてね
388:デフォルトの名無しさん
20/06/17 07:40:39.83 0yXiYm7U.net
>>386
ありがとうございます
特に隠すようなコマンドでもなかったのですが、
インターネット速度の自動計測スクリプトを作ってみようとしてます
.>\speedtest.exe -L | select-string 'OPEN Project \(via 20G SINET\)'
15047 OPEN Project (via 20G SINET) Tokyo Japan
> $i=(.\speedtest.exe -L | select-string 'OPEN Project \(via 20G SINET\)' | %{$_ -split ' '}[0])
> Write-Output $i[1]
15047
389:デフォルトの名無しさん
20/06/17 07:50:00.92 PujUJ59z.net
cmd .exeに-Lオプションがあるのかと思った人は俺以外にもたくさんいるはず
390:デフォルトの名無しさん
20/06/17 08:00:55.98 H0Dcbe9T.net
VSCode で、PowerShell の拡張機能を入れると、構文チェックで、
Write-Host を、Write-Output か、Write-Verbose に変えろって警告される
PowerShell/PSScriptAnalyzer
URLリンク(github.com)
391:デフォルトの名無しさん
20/06/17 08:04:57.13 H0Dcbe9T.net
漏れは回線速度を、NETFLIX で測っている
URLリンク(fast.com)
392:デフォルトの名無しさん
20/06/17 10:09:26.78 U7B7s7qz.net
>>388
(.\speedtest.exe -L | select-string 'OPEN Project \(via 20G SINET\)' | %{$_ -split ' '}[0])[1]
393:392
20/06/17 10:13:28.30 U7B7s7qz.net
>>388
あれ、speedtest.exe の「-L」って、ネットワーク的に近い場所のサーバを
表示するだけで、実際の計測はしてないようですけど、これで良いんですか?
>>388 の続きがある、ってことですかね。
394:392
20/06/17 10:21:19.19 U7B7s7qz.net
>>388
タスクスケジューラで回すことを考えてるのかも知れませんが、単に
.\speedtest.exe -s 6766
とか
.\speedtest.exe -s 15047
といった感じにしないのはなぜですか?
speedtest.exe -L を実行する意図がよく分かりません。
395:392
20/06/17 10:29:32.27 U7B7s7qz.net
>>388
連投ごめんなさい、speedtest.exe は出力形式を CSV とか JSON とか色々
選べますので、ヒューマンリーダブルのものを加工するよりもそっちのほうが
簡単だと思います。
実行例:近隣サーバの列挙
PS > .\speedtest.exe -L -f csv
"ID","Name","Location","Country","Host"
"24333","Rakuten Mobile , Inc","Tokyo","Japan","ookla.mbspeed.net"
"15047","OPEN Project (via 20G SINET)","Tokyo","Japan","speed.open.ad.jp"
"28910","fdcservers.net","Tokyo","Japan","lg-tok.fdcservers.net"
~以下略~
実行例:サーバを指定した計測
PS > .\speedtest.exe -s 15047 -f csv
"OPEN Project (via 20G SINET) - Tokyo","15047","4.43","0.605","0","72540509","45781634","871440390","582254568","URLリンク(www.speedtest.net)
396:デフォルトの名無しさん
20/06/17 15:45:25.40 UcA8Gcsf.net
ジョブをパイプの途中で使いたいと考えています
1 .. 3 | % { $_; sleep 1 } | & { process { ">$_" }}
これは1秒間隔で結果が出ます
Start-Job { 1 .. 3 | % { $_; sleep 1} } | Receive-Job -wait
これも1秒間隔で結果が出ます
1 .. 3 | % { $_; sleep 1 } | Start-Job { process { ">$_" }} | Receive-Job -wait
これは結果がまとめて出ます
1秒間隔で結果を得るにはどうすれば良いのでしょうか
# パイプラインで入出力がsjisのコマンドとutf8のコマンドを通すのが最終目的です
# データ生成 | sjis入出力 | utf8入出力 みたいなイメージ
# パイプラインでエンコーディングを混在させるのに$OutputEncodingの方は
# スコープで分ければすみますが、[console]::OutputEncodingはスコープ無関係
# なのでジョブで分けようかと
397:デフォルトの名無しさん
20/06/17 16:28:19.33 pLBooGKC.net
なんでワンライナーでやる必要があるのかね、こういうの
保守とか考えないのかね
398:デフォルトの名無しさん
20/06/17 16:55:10.36 /58stVp5.net
パイプの弊害か
399:デフォルトの名無しさん
20/06/17 17:44:32.75 UcA8Gcsf.net
>>397
コマンドラインで結果をすぐに見たいからですね
ページャーにつないで欲しい結果が出てきたら確認して終了
ステップごとに完了待ちしてたら時間がもったいない
400:デフォルトの名無しさん
20/06/17 23:59:11.03 H0Dcbe9T.net
>>396
>1 .. 3 | % { $_; sleep 1 } | Start-Job { process { ">$_" }} | Receive-Job -wait
1 .. 3 | % { $_; sleep 1 }
この部分を、Start-Job の中に入れたら?
401:デフォルトの名無しさん
20/06/18 05:52:46 7bz/apiR.net
$ary_names = @('太郎','次郎','三郎','四朗','五郎')
write-output $ary_name[@] #bashの記法
太郎,次郎,三郎,四朗,五郎
的なことをしたい。※区切り文字はなんでも可。
現状、配列に文字列をくっつけると1行で出るので
write-output ("a"+$aaa).trim("a")
という強引な方法をとっております。もっとPowershell的にスマートな方法があれば
お教えくださいませ。
402:デフォルトの名無しさん
20/06/18 06:58:53 3wPjj0xg.net
$ary_names -join ','
403:デフォルトの名無しさん
20/06/18 07:18:11.97 7bz/apiR.net
>>402
ありがとうございます!
404:デフォルトの名無しさん
20/06/18 09:01:24.17 hwvpLd3O.net
>>400
それだと最終目的のためにはStart-Jobの入れ子が必要になるなあ
制御不能になりそうだし面倒なので避けたい
cmd.exeを使うことにします
405:デフォルトの名無しさん
20/06/19 06:41:17 RNyMoV2a.net
$s=[datetime]::Now; 1 .. 5 | ForEach-Object { Start-Sleep 1; ">{0}" -f $_ } | ForEach-Object { Start-Sleep 1; ">{0} {1}" -f $_, ([datetime]::Now - $s).TotalSeconds}
2秒間隔、トータル10秒という結果に困惑している
406:デフォルトの名無しさん
20/06/19 07:30:31.94 JIIBGf6G.net
>>405
二重ループを期待してたってこと?
407:405
20/06/19 08:42:12.76 RNyMoV2a.net
最初は2秒、それから1秒間隔でトータル6秒だと思ってた
1秒待ちをStart-Sleepでなく別のプロセスで待たせても変わらなかった
408:デフォルトの名無しさん
20/06/19 08:51:47 GhHOGZr1.net
パイプつなぎはいわゆるgenerator(PowerShellでの呼び方は知らない)になるってことかな?
409:デフォルトの名無しさん
20/06/19 08:52:39 JIIBGf6G.net
1に対して最初のfor-eachの中身処理した後に次のfor-eachの中身処理。
2に対して...
3に対して...
4に対して...
5に対して...
ふたつのfor-eachの中身がどういう順に処理されてるか確認できるように表示を工夫してみたら?
410:405
20/06/19 09:08:23.61 RNyMoV2a.net
そこはなんとなくイメージできたんでもういい
パイプラインの各段を別のプロセスにすると6秒で終了する
同じように6秒で終了すると思ってたら違ったんで戸惑ったというお話
411:405
20/06/19 11:12:17.79 RNyMoV2a.net
$s=[datetime]::Now; 1 .. 5 | Start-ThreadJob { process { Start-Sleep 1; ">${0}" -f $_ }} | Receive-Job -Wait -AutoRemoveJob | ForEach-Object { Start-Sleep 1; ">{0} {1}" -f $_, ([datetime]::Now - $s).TotalSeconds}
別スレッドを指定したらトータル6秒になった
一人研究発表会になっちまったな。すまぬ。
412:405
20/06/19 11:40:12.67 RNyMoV2a.net
よく見たら結果がおかしい。お手上げだ。諦めた。
413:デフォルトの名無しさん
20/06/19 17:20:54 qQd5c1Zr.net
>>397
おまえはpythonでもつかってろ
414:デフォルトの名無しさん
20/06/19 18:23:41.02 OOcqKGQK.net
ラクダが笑ってんぞ
415:405
20/06/19 21:01:31.39 RNyMoV2a.net
できたーーーー
$s=[datetime]::Now; 1 .. 5 | ForEach-Object { Start-Sleep 1; ">{0}" -f $_ } | ForEach-Object { Start-Sleep 1; ">{0} {1}" -f $_, ([datetime]::Now - $s).TotalSeconds}
にちょい足しして
$s=[datetime]::Now; 1 .. 5 | ForEach-Object -Parallel { Start-Sleep 1; ">{0}" -f $_ } -ThrottleLimit 1 | ForEach-Object { Start-Sleep 1; ">{0} {1}" -f $_, ([datetime]::Now - $s).TotalSeconds}
にしたらStart-ThreadJobを使った時より遅いけど簡単に予想してた結果になった
お騒がせしました
416:405
20/06/19 21:15:58.78 RNyMoV2a.net
こ、今度こそできたー
$s=[datetime]::Now; 1 .. 5 | Start-ThreadJob { $input | ForEach-Object {Start-Sleep 1; ">{0}" -f $_ }} | Receive-Job -Wait -AutoRemoveJob | ForEach-Object { Start-Sleep 1; ">{0} {1}" -f $_, ([datetime]::Now - $s).TotalSeconds}
やっぱりこれが最終版ということにしたい
お邪魔しました
417:デフォルトの名無しさん
20/06/20 00:50:50.12 na6pkPqz.net
はいつぎ
418:デフォルトの名無しさん
20/06/20 08:11:14.95 wKnheY+E.net
Powershellを使いこなすにはcomを知らなければならないと聞いたのですが、
comについてはどうやって学ぶのがオススメですか?
ググラビリティの悪い単語なので、
思うように検索できません
Excellの機能を使ってあれこれしたいです
419:デフォルトの名無しさん
20/06/20 09:03:13.32 5oXecify.net
COM の使い方
URLリンク(docs.microsoft.com)(v=msdn.10)
420:デフォルトの名無しさん
20/06/20 11:29:31 XppcwtFP.net
Powershellを使い始めました
皆さん、こんなの全部覚えてるんですか?
どうやって覚えました?
ファイル開いて書き込むだけで
こんなにもたくさん覚えないといけないって
大変だったんじゃないですか?
$output_file = "C:\bin\hoge.txt"
$sw = New-Object System.IO.StreamWriter($output_file, $false, [Text.Encoding]::GetEncoding("UTF-8"))
$sw.WriteLine("aaa")
$sw.WriteLine("あああ")
$sw.Close()
$sw.WriteLine("あああ")
$sw.Close()
この辺はまだ、覚えられるのですが、
New-Object System.IO.StreamWriter←InputOutputを、ストリームにライトするんだろうな
$output_file, $false, ←ファイル名と、追記、上書を指定するんだろうな。
[Text.Encoding]:: ←なんで[]包むんだ、:: ←このダブルのコロンは何だ、
GetEncoding("UTF-8")) ←何でファイル作ってるのにGetなんだ、
単純に
$mojiko-do="UTF-8"で
New-Object System.IO.StreamWriter($output_file, $false,$mojiko-do)じゃないんだと、
覚えることや、なぜこうなってるんだに少々ビビってます。
皆さんが、どうやってこんなに複雑で面倒なものを覚えたか、コツがあったら教えてください。
421:デフォルトの名無しさん
20/06/20 11:33:23 XppcwtFP.net
ほかにも、メソッド、プロパティ?クラス?で書き方がものすごいたくさんあるようで、めまいがします。
覚えれば仕事が楽になることは分かっているので、頑張りたいところなんですが
あまりの複雑さに、皆さんがどうやって覚えたのか、コツがあればぜひともお教えください。
422:デフォルトの名無しさん
20/06/20 11:46:07.33 6HpZ1NhN.net
良くも悪くも.NETが前提だから
先にC#を覚えるのがコツかな
423:デフォルトの名無しさん
20/06/20 12:28:41.13 sltMp+ny.net
コード量が多いってことと覚えなきゃいけない知識量は必ずしも一致しないからな
Perlみたいに省略できまくるワンライナーのほうがスパゲティったときわけ分からなくなる
424:デフォルトの名無しさん
20/06/20 12:29:17.17 dcvMDCGE.net
とにかく書いて動かす
やってみる、作ってみる
国語力、英語力は少しつけようとする
425:デフォルトの名無しさん
20/06/20 12:31:14.10 E6EedD+K.net
.NETなんて前提にしなくてもマルチプラットフォームで使える文法を身につけるのが先
426:デフォルトの名無しさん
20/06/20 13:13:11.69 w0A+CU3q.net
>>420
ファイルに書き込むだけならコマンドレットで足りる
痒い所に手が届かない時にググりながら.NETをボチボチ使って行けば良い
427:デフォルトの名無しさん
20/06/20 13:13:46.53 F3e6GYXo.net
正直言ってPowerShellは覚える必要ない
スクリプトファイルを作って使うならC#を使うのと大差ない
それならC#を覚えて使う方がいい
コマンドラインシェルとして使うなら.NETやらCOMやら取り込む使い方は
何かあった時にシェルが巻きぞえになって、シェルを殺すしかなくなる
そうならない程度に言語自体の機能だけで使うなら、とりたて覚えるほどでもない
428:デフォルトの名無しさん
20/06/20 13:42:16.03 dcvMDCGE.net
本番環境その場で場当たり的にコマンド打つのはあり得ないしな
まあすごくユルい会社なら知らんが
429:デフォルトの名無しさん
20/06/20 13:50:27.59 zwBEwaPL.net
>>420
その書き方は.NETライブラリを使っているのでPowershellの初歩の枠を越えてる
追記するだけならこう
$output_file = "C:\bin\hoge.txt"
"aaa" | Out-File $output_file -Append -Encoding UTF8
"あああ" | Out-File $output_file -Append -Encoding UTF8
こうしてもいい
"aaa", "あああ" | Out-File $output_file -Append -Encoding UTF8
UTF16でいいならこれ
"aaa", "あああ" >> $output_file
Powershell 5以前には欠陥があって、BOMなしUTF8を新規作成する簡単な手段がなかった
だからStreamWriterを持ち出すようなサンプルが普及していて、初歩のはずなのに難しいと感じる要因になってる
430:デフォルトの名無しさん
20/06/20 14:13:22.51 Xz+FX1Oy.net
必要はないけど覚えたら便利
431:デフォルトの名無しさん
20/06/20 14:35:58.75 YZMPfrl8.net
最初から暗記する必要はなくて、機能を一覧表にしておいて
必要に応じてそれを参照、コピペすればいい
出現頻度の高いものは自然と覚える
いずれにしても手打ちするのは時間の無駄なので
コピペ推奨
432:デフォルトの名無しさん
20/06/20 16:51:19.56 KBDfWM5t.net
習得してない人達のアドバイスは聞く必要がない
あっだからできないんだっていう見本にはなるけど
433:デフォルトの名無しさん
20/06/20 16:58:42.46 py+iqQxS.net
俺以外のアドバイスは聞く必要がない
434:デフォルトの名無しさん
20/06/20 17:35:07.43 6sC7z1nS.net
>>420
>コツがあったら教えてください。
PowerShell に限った話じゃないけど、学校の授業みたいに「勉強ありき」で
努力するよりも、「これをやるためには PowerShell を使うしか無い」という
状況に追い込まれると覚えやすいですね。
あと、積極的に英語のフォーラムなどから情報を得るようにしたほうが良いと思います。
やはり、日本語と英語では情報量が雲泥の差ですので。
Google 翻訳を使えば何とかなります。
435:デフォルトの名無しさん
20/06/20 20:10:35.90 WPfafdOl.net
>>434
> 「これをやるためには PowerShell を使うしか無い」という状況
そんな状況は、普通は無い。
あるとすれば、>>428が言った
> 本番環境その場で場当たり的にコマンド打つ
ぐらい。
436:デフォルトの名無しさん
20/06/20 23:24:31.04 tXS4Zxv6.net
PowerShell(PS)で、ビジネスロジック・複雑なものを書いたら、ダメ!
基本的に、CSV・JSON などは、Ruby で書いて、
起動部分だけを、コマンドプロンプト・PS・VBS などで作る
437:デフォルトの名無しさん
20/06/20 23:38:30.06 sltMp+ny.net
Pythonにしてくれ頼む
438:デフォルトの名無しさん
20/06/21 08:39:56.92 PKUYu7rs.net
>>435
>そんな状況は、普通は無い。
仕事で MS のエンタープライズ系製品を扱ってると、嫌というほど
そういう状況に遭遇しますね。
Windows Server, Exchange, SQL Server, Office 365 あたりの
設計、構築、運用に携わってれば日常茶飯事です。
そういう仕事に携わるようになってから PowerShell を覚えた、って人が
多いと思ったけど、そうでもないのかな?プログラム板だから違うのかな?
439:デフォルトの名無しさん
20/06/22 18:21:34.75 njZ7JPCW.net
>>0438
君は正常。
440:デフォルトの名無しさん
20/06/24 07:34:20.49 9MFoHisW.net
コマンドプロンプトでバッチを作るとちょっとした自動化に便利というのを最近知って調べたら
今はPowerShellCoreが現行とたどり着いたが
やっぱり移行するしないで揉めてる
441:436
20/06/24 08:08:25.26 rM4tv+8j.net
さすがに、バッチでプログラミングしてはいけない!
可読性が低すぎる
Ruby スクリプトなどを起動するだけにしておくべき
442:デフォルトの名無しさん
20/06/24 08:40:10 L+v/qVAN.net
>>440
用途・要件次第。
業務利用という前提だけど、自分だったらこういうポリシーで緩やかに移行する。
・既存の cmd バッチや WSF、VBS → 基本的には移行(移植)しない
※例外:改修が必要になった場合は個別対応
・新規 → 基本的には PowerShell で作るべき
※例外:極々単純なもの、自分だけが使い捨てするもの
443:デフォルトの名無しさん
20/06/24 08:44:24 /txx2vwO.net
可読性w
可読性に煩いやつ程低レベルだよね
三項演算子とか
444:デフォルトの名無しさん
20/06/24 09:05:28.99 W7e3ICMc.net
>>441
お前はRuby禁止のスレでRubyでは~Rubyでは~とやるのをやめろ。ノイズにしかならない糞レスはスレの可読性を下げるだけだ。
445:デフォルトの名無しさん
20/06/24 09:51:09 LpqCs0qI.net
440で思い出したけど、powershell coreって今どうなってるんや
自分は実行環境としては5.1をメインで使ってるけど、みんなどこら辺なんや
446:デフォルトの名無しさん
20/06/24 10:09:13.32 wIzfCOgT.net
win10プレインストールしか使っとらんわ
というかツール勝手に入れられない客先環境で戦うためのツールって認識
447:デフォルトの名無しさん
20/06/24 10:48:39.06 oYgVDO6A.net
>>446
> ツール勝手に入れられない客先環境で戦うためのツール
ほんそれ。
いまメインでやってる案件だと、お客さんから貸与されてる作業用 PC があって、
お客さんの環境にはそのマシンしか繋げられない。もちろん、世に数多とある便利ツールを
好き勝手に入れることは出来ない。
でも PowerCLI などの PowerShell モジュールのインストールは純正管理ツール扱いで
許可されてるので、構築とか保守作業では PowerShell スクリプトを使いまくってる。
いちいちマウスでカッチンカッチンやってたら、日が暮れちゃうからね・・・。
448:デフォルトの名無しさん
20/06/24 12:17:32.10 9MFoHisW.net
>>442
なるほど。
どうも。
449:デフォルトの名無しさん
20/06/24 21:01:47.98 jVaXlMW4.net
scriptblock[] を受け取って、scriptblockをそれぞれスレッドで動かして
パイプでつないで実行するfunctionを書きたいんだがうまく書けない
ようするに
$s = [datetime]::Now
1 .. 10 |
% { sleep 1; ">$_" } |
% { sleep 1; ">$_" } |
% { sleep 1; ">{0} {1} " -f $_, ([datetime]::Now - $s).TotalSeconds }
を実行すると
>>>1 3.1179897
>>>2 6.1354357
>>>3 9.1403334
>>>4 12.1434852
と3秒間隔で結果が出るんで
$s = [datetime]::Now
threadedpipe @( { 1 .. 10 },
{ % { sleep 1; ">$_" } },
{ % { sleep 1; ">$_" } },
{ % { sleep 1; ">{0} {1} " -f $_, ([datetime]::Now - $using:s).TotalSeconds }})
みたいに書いて、最初が3秒目で1秒間隔で結果出力したい
いろいろ試して諦めたんだが、そもそもPowerShellではこういうfunctionは書けないの?
450:デフォルトの名無しさん
20/06/24 22:06:24.12 VGKuFIs7.net
powershellのコマンドはプロセス作らないから無理じゃね
マルチスレッドをそんなお手軽に制御できたら夢みたいだけど
451:デフォルトの名無しさん
20/06/25 00:26:33.50 GAspYPHa.net
あれでもForeach-object あたりにparallelこなかったっけ
452:デフォルトの名無しさん
20/06/25 00:40:28.26 BtDpxRK3.net
並列に動かすってことは普通にやれば1秒間隔じゃなくてほぼ同時に出力されることになる
どういう意図なのかはわからないけど無理やりやるんなら入力側で一秒ずつ待ってやるか
$sw = [Diagnostics.Stopwatch]::StartNew()
1..10
| % { ">$_"; sleep 1 }
| % -pa { sleep 1; ">$_" }
| % -pa { sleep 1; ">$_" }
| % { "{0} {1:F2} " -f $_, $sw.Elapsed.TotalSeconds }
もしくは出力側で一秒ずつ待ってやるか
1..10
| % -pa { sleep 1; ">$_" }
| % -pa { sleep 1; ">$_" }
| % { sleep 1; "{0} {1:F2} " -f $_, $sw.Elapsed.TotalSeconds }
453:デフォルトの名無しさん
20/06/25 00:44:41.05 LTqYJW83.net
シェルスクリプトみたいに各プロセスが並列的に流れてくるテキストを処理して…
みたいのをやりたいのかなと推測してる
454:デフォルトの名無しさん
20/06/25 08:46:34.24 L3VdfOGw.net
そうそうそういうこと
イメージとしては URLリンク(ja.wikipedia.org)命令パイプライン
パイプラインのステージごとに1スレッド起動して全データで使いまわしたい
4ステージのパイプラインなら4スレッドで動かす
ForEach-Object の -Parallel はデータごとにスレッドを起動するから別物
スレッドプールで使いまわすにしてもちょっと違う
ちなみに sleep させてるけど時間がかかる処理の代用ね
455:デフォルトの名無しさん
20/06/25 08:53:56.13 L3VdfOGw.net
こっちの方がイメージが近いかも
URLリンク(ja.wikipedia.org)パイプ_(コンピュータ)
456:デフォルトの名無しさん
20/06/25 09:37:48.10 piKX+XZq.net
普通にワンライナー諦めれば次の作業にすすめるんじゃない?
457:デフォルトの名無しさん
20/06/25 09:50:30.28 L3VdfOGw.net
ワンライナーなんか関係ないんだけど
原理は >>416 にあるから、それを簡単に実現できるように
function threadedpipe { param([scriptblock[]] $sbs)
を書きたいと言ってる
458:デフォルトの名無しさん
20/06/25 09:56:30.77 1+fg5ofc.net
あぁまたこいつだったか
459:デフォルトの名無しさん
20/06/25 10:49:27.00 dZiolc11.net
>パイプラインのステージごとに1スレッド起動して全データで使いまわしたい
これが根本的に間違ってるだろ。
パイプで連結するってことは、前後(依存)関係があるってことで、それぞれをスレッド分割したところで全く意味がない。
460:デフォルトの名無しさん
20/06/25 11:16:02.92 L3VdfOGw.net
何言ってんの?
パイプラインってものをわかってない
これスクリプトファイルにして試してみ
function recvdata { foreach ($i in 1 .. 10) { sleep 1; $i }}
filter mul10 { sleep 1; $_ * 10 }
filter add1 { sleep 1; $_ + 1 }
filter fmtresult { "{0} {1}" -f $_, ([datetime]::Now - $script:s).TotalSeconds }
"スレッドなし"
$s = [datetime]::Now
recvdata | mul10 | add1 | fmtresult
"ステージごとに別スレッド"
$s = [datetime]::Now
Start-ThreadJob {
filter add1 { sleep 1; $_ + 1 }
Start-ThreadJob {
filter mul10 { sleep 1; $_ * 10 }
Start-ThreadJob {
function recvdata { foreach ($i in 1 .. 10) { sleep 1; $i }}
recvdata
} | Receive-Job -Wait -AutoRemoveJob | mul10
} | Receive-Job -Wait -AutoRemoveJob | add1
} | Receive-Job -Wait -AutoRemoveJob | fmtresult
461:デフォルトの名無しさん
20/06/25 11:35:16.74 emOdy//g.net
きたない
462:デフォルトの名無しさん
20/06/25 11:41:54.06 L3VdfOGw.net
んだからfunction threadedpipeを作って見やすくしたいっつってんだろ
463:デフォルトの名無しさん
20/06/25 12:35:03.44 WfI766VN.net
そこじゃないだろ
464:デフォルトの名無しさん
20/06/25 13:13:44.27 sZY/v5D+.net
>>462
単に興味本位で聞くんだけど、差し支えなかったら教えて。
具体的にどんなデータをどんな状況で処理しようとしてるの?
465:デフォルトの名無しさん
20/06/25 16:37:26 MV6c2Qez.net
なにけんけんしてんの?
466:デフォルトの名無しさん
20/06/25 20:19:35.75 hxSOAVLp.net
>>462
繰り返しになるけどPSはunixシェルと仕組みが全然違うから厳しいと思う
パイプのバッファリングはどう仕組むつもりなの?
467:デフォルトの名無しさん
20/06/25 21:11:04 L3VdfOGw.net
いまだにこんな見当違いを目にしてびっくり
試せるように >>460 を書いたのに試してないのかな
Start-ThreadJobが使えない環境なら、代わりにStart-Jobを使っても動くぞ
スレッドとジョブの起動速度差で少し遅いけどちゃんと動くから試してみろよ
というわけで、動作することはちゃんと確認できてる
俺が聞いたのは、>>460 みたいにごちゃごちゃ書くのが面倒だから
threadedpipe @({recvdata}, {mul10}, {add1}, {fmtresult})
のように書けるような function threadedpipe が作れるかどうかなの
まあ制約付きで一応できたんだけど
468:420
20/06/25 23:05:56.80 ZIjS4UcO.net
とりとめもなく、推敲もなく適当に書き散らかしてごめんなさい
レスありがとうございます
理解して、Powershell組むのはかなり困難そうなので
Myコピペライブラリでも作って、理解しないでも組めるような
体制を作っていこうと思います
ありがとうございました。
ちなみにファイル作成は >>で用は足りました
469:デフォルトの名無しさん
20/06/25 23:48:32.33 GAspYPHa.net
きたないコードで目的も意味不明
まさに自慰
470:デフォルトの名無しさん
20/06/26 01:13:06.63 UcUHbC3j.net
質問者より明らかにレベル低いのにイチャモンだけは一流だな
だまってろよお前は
471:デフォルトの名無しさん
20/06/26 05:47:21.88 ZKLfm8jC.net
>>466
> パイプのバッファリングはどう仕組むつもりなの?
普通にFIFOを実装するだけだろ
何が難しいと思ってるんだ?
472:デフォルトの名無しさん
20/06/26 06:30:47.02 uqHA56uo.net
>>470
お前もだなw
473:デフォルトの名無しさん
20/06/26 07:02:56.31 rwBI62Tc.net
ここがどうだとかじゃなくて、
汚いとかって言い方傷つくだろうが
474:デフォルトの名無しさん
20/06/26 10:47:41 lJi08xny.net
>>449
こんな感じ?
ただ動くだけのサンプル。エラー処理とかオブジェクトの後始末とか何もしていない。
function Invoke-ThreadedPipeline([ScriptBlock[]] $ScriptBlock) {
$p = $ScriptBlock | % {
$p = [RunspaceFactory]::CreateRunspace().CreatePipeline()
$p.Commands.AddScript($_)
$p.Runspace.Open(); $p.InvokeAsync()
$p
}
while ($p = @($p | ? {-not $_.Output.EndOfPipeline})) {
$i = [Threading.WaitHandle]::WaitAny(($p | % {$_.Output.WaitHandle}))
$o = $p[$i].Output.Read($p[$i].Output.Count)
if ($i -lt $p.Length - 1) {
$null = $p[$i + 1].Input.Write($o, $true)
if ($p[$i].Output.EndOfPipeline) {$p[$i + 1].Input.Close()}
}
else {
$o
}
}
}
$o = Get-Date
Invoke-ThreadedPipeline (
{1..10},
{process {Start-Sleep 1; ">$_"}},
{process {Start-Sleep 1; ">$_"}},
{process {Start-Sleep 1; ">$_"}}
) | % {'{0} : {1}' -f $_, (New-TimeSpan $o).TotalSeconds}
475:474
20/06/26 10:49:06 lJi08xny.net
スクリプトブロックのバインドとか、スコープとか、面倒な問題は見ないふり。
そもそも、PowerShell のスコープはスレッドセーフにはできていないので、
問題に対処するのは、ほとんど不可能なのかも。
476:デフォルトの名無しさん
20/06/26 12:23:31.85 hzH3p+iw.net
IT掲示板群 URLリンク(x0000.net)
学術の巨大掲示板群 - アルファ・ラボ URLリンク(x0000.net)<)
UIライブラリ (C#, 2D) を作ったよ
URLリンク(x0000.net)
連続と離散を統一した!
URLリンク(x0000.net)
4Dエンジン(画像有り)
URLリンク(x0000.net)
matrixのライブラリ
URLリンク(x0000.net)
ある強力なFor関数
URLリンク(x0000.net)
SQLライブラリ
URLリンク(x0000.net)
PS malloc / free を実装してみた (C#)
URLリンク(up.x0000.net)
477:デフォルトの名無しさん
20/07/05 04:12:29.94 sb7IOZLx.net
教えてください。
powershell.exeに
"powershell.exe"が見つかりません。名前を正しく入力したかどうかを確認してから、やり直してください。
ってダイアログが出て怒られるのだが、
これってどういうことですか?
478:デフォルトの名無しさん
20/07/05 08:19:48.13 EbIp5fqD.net
>>477
単なるウケ狙いなら別だけど、本気でなんとかしたいのならば、
前後の経緯を含めて詳細に説明してもらわないとなんとも言えない
479:デフォルトの名無しさん
20/07/05 09:06:15.18 sb7IOZLx.net
そうですねすみません。
Python3.6、Bazel 2.0.0、MSYS2、Visual C++ Build Tools 2019、WMF5.1、
CUDA toolkit 10.1、cuDNN 7.6を入れて、Tensorflow 2.2をビルド。
x64 Native Tools Command Prompt for VS 2019から、bazel buildでビルド中に、
「powershell.exeが見つかりません。~」のダイアログが出る。ダイアログの左上はpowershell.exe。
放置すると最大4個出てビルトが一時停止するが、ダイアログの「OK」で閉じると再開する。しばらくすると、また出る。
PCは、
OS:Windows7pro sp1 x64
CPU:Core2Quad Q9550
GPU:Geforce GTX1650super
MEM:8G
480:デフォルトの名無しさん
20/07/05 09:07:58.29 sb7IOZLx.net
です。
何か気が付くところがあれば教えてください。
481:デフォルトの名無しさん
20/07/06 15:26:47.18 ENMHKR++.net
powershell.exeが見つからない。
だからこそ、poweshell.exeが見つからなくてはと思っている。
482:デフォルトの名無しさん
20/07/06 16:00:54.38 AV85qEaL.net
はいすべった
483:デフォルトの名無しさん
20/07/06 19:14:17.53 mGwQnOrU.net
PATHが通ってないんじゃないの
サポート切れのWindows7を使い続けてて大丈夫か
484:デフォルトの名無しさん
20/07/06 19:34:12.08 BdiDJNUx.net
建前上esuあるから必要な部署はそれ当てて使ってるよ
485:デフォルトの名無しさん
20/07/06 20:54:49 zdAH+P0d.net
win7だって(自分で削除しなけりゃ)普通にpathは通っているはずだけど
まあ確かめてみることだね
486:デフォルトの名無しさん
20/07/06 20:56:13 0H1iFJXS.net
ダイアログが出てる時にタスクの中にpowershell.exeがいませんでした。
誰が出しているのか追いかけてみます。
お騒がせしました。
487:デフォルトの名無しさん
20/07/06 21:05:43.69 fLXZOc4N.net
32bit版 or 64bit版を探しにいってるんじゃないの?
488:デフォルトの名無しさん
20/07/07 12:27:32.25 Csl+eNq2.net
Windows 10 なら、コマンドプロンプトで、
where powershell
と入力すると、
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
489:デフォルトの名無しさん
20/07/07 21:09:26.46 IcFS4Epu.net
whereは10だけじゃなくて7にも標準搭載されてる
98や2000ならリソースキットに含まれてる
490:デフォルトの名無しさん
20/07/11 09:02:38.89 n9XGFFVi.net
NuGetパッケージ使いたい時ってどうすれば使えんの
例えばSeleniumを使いたい場合C#なら
dotnet add package Selenium.WebDriver
これで使えるようになるけどPSの場合はどうすれば
491:デフォルトの名無しさん
20/07/11 21:53:51.85 I6xaQmI+.net
Make using NuGet packages installed with Install-Package easier to use - make Add-Type support NuGet packages
URLリンク(github.com)
492:デフォルトの名無しさん
20/07/17 09:19:06 6MuP2T5H.net
v6.2.7
URLリンク(github.com)
v7.0.3
URLリンク(github.com)
493:デフォルトの名無しさん
20/07/24 01:22:35.38 r0N61jeX.net
明治の「 おいしい牛乳 」ってあるけど
「 おいしい 」って自分で付けちゃうなんて
強気というかふてぶてしいよな?
「 PowerShell 」からも同じにおいがするぜ
494:デフォルトの名無しさん
20/07/24 01:48:02.23 UQ3TOH2s.net
Apple & IBM「…」
495:デフォルトの名無しさん
20/07/24 10:09:22 860vhoVN.net
Powerこそ力
496:デフォルトの名無しさん
20/07/24 10:37:13 56CkEgqB.net
shellこそ貝殻!
497:デフォルトの名無しさん
20/07/24 14:36:37.83 jOZb/2Gr.net
💪🐚
498:デフォルトの名無しさん
20/07/24 14:40:35.13 30uJqngI.net
powerpoint
力点?
499:デフォルトの名無しさん
20/08/05 12:02:30 gYncIR+S.net
>>131 >>132
pwshw
普通のコンソールアプリだとリンクオプション変えるだけでできる気がするが
何が長引いとるんや?
windows以外にも対応するのが大変なんかな
500:デフォルトの名無しさん
20/08/13 17:41:10.43 e4hfVbk2.net
ある値で、とあるファイルをgrep検索かけて
grepで引っかかったら 変数に0、grepで引っかからなかったら変数に1
ということをしたいのですが、どんな方法で実現できますでしょうか。
linux でいうとこういうものです
# cat hoge.txt | grep abc ←知りたいのはここ相当のもの
# echo $?
0 ←abcが引っかかった
#
# cat hoge.txt | grep abc ←知りたいのはここ相当のもの
# echo $?
1 ←abcが引っかからなかった
#
よろしくお願いいたします。
501:デフォルトの名無しさん
20/08/13 18:00:29.06 3scCogHG.net
$r = gc hoge.txt | sls abc
if ($r -ne $null) {
# 引っかかった & $rにはslsの結果
} else {
# 引っかからない
}
502:デフォルトの名無しさん
20/08/13 18:07:53.30 e4hfVbk2.net
>>501
ありがとうございます!ばっちりです。
追加で申し訳ないんですけど、これを変数をgrep対象にして
戻り値を取得する事ってできますでしょうか?
> Write-Output $hoge
aaa ←こんな感じで複数行はいってる変数
bbb
ccc
ddd
eee
ffff
503:デフォルトの名無しさん
20/08/13 18:56:58.07 3scCogHG.net
$hoge | sls abcでいいんじゃね
504:デフォルトの名無しさん
20/08/13 19:18:09 rGVB7rFL.net
(cat hoge.txt) -as [string] -cmatch "abc"
とか?
TrueFalseになっちゃうけど
505:デフォルトの名無しさん
20/08/13 20:45:21.78 hEr1UF+A.net
ふつーはifに直接つっこむ
if (Select-String abc hoge.txt -CaseSensitive -Quiet) {
if ($hoge | Select-String abc -CaseSensitive -Quiet) {
506:デフォルトの名無しさん
20/08/13 21:13:55.51 takIe+yE.net
個人的には>>504のTrueFalse管理が好きかな
01なら簡単に変換出来るし
$r = (cat hoge.txt) -as [string] -cmatch "abc";
[int]!$r;
507:デフォルトの名無しさん
20/08/13 22:02:49.13 hEr1UF+A.net
巨大ファイルを全部なめたいの?
508:デフォルトの名無しさん
20/08/14 05:21:16 SCMnTycc.net
漏れは、Windows 10, WSL, Ubuntu 18.04 を入れているから、
grep は、Linux 側でやるか、Ruby などを使う
Windows側のPowerShell などでは、やらない。
複雑なスクリプトは、Linux側のRubyでやる
509:デフォルトの名無しさん
20/08/14 07:16:55.02 fFUBtJk9.net
>>501
gcの結果って配列でしたっけ?
配列の$nullとの比較の場合、nullを左辺にしないといけないんじゃなかったでしたっけ?
もうpowershell側で修正されてるかな
510:デフォルトの名無しさん
20/08/14 08:15:51.24 beR79RQl.net
推奨 NG ワード:
Ruby
漏れ
511:デフォルトの名無しさん
20/08/14 23:17:26.92 SCMnTycc.net
>>502
Linux のgrep なら、
AND 検索、パイプで
grep -i 単語1 ./* | grep -i 単語2
OR 検索、-e で
grep -i -e 単語1 -e 単語2 ./*
途中で改行しても、同じ
grep -i "単語1
単語2" ./*
512:デフォルトの名無しさん
20/08/15 16:13:38.92 qyy6aN9C.net
>>509
-eqの配列フィルタのことだと思うけどgcやslsは$nullを含む配列は返さないから問題ない
513:デフォルトの名無しさん
20/08/24 20:47:25.66 VQq4kdHe.net
ストアにPowerShell Preview登場
URLリンク(www.microsoft.com)
514:デフォルトの名無しさん
20/08/25 20:56:27.18 +ct4ya2Y.net
GitHubのPreviewとどう違うのかと思ったら、アイコンが違うな
なんか気持ち悪い色になってる
515:デフォルトの名無しさん
20/08/25 22:59:28.31 SeBJUZXv.net
powershellスクリプトで高DPI対応をしたいのですが、可能でしょうか?
やりたい事は高DPI環境で画面キャプチャを取ることですが、
スケーリングに応じて実際の解像度より小さい値が画面サイズとして返ってきてしまいます。
SetProcessDPIAware()を最初に呼んでも効果がありませんでした。
普通のアプリのようにEXEにmanifestファイルを埋め込むこともできないので無理でしょうか?
516:デフォルトの名無しさん
20/08/29 13:02:51.79 z6uRv8YY.net
使ってるエクセルアドインのアプデが不定期に入るんだけど、
その時はエクセルを閉じなきゃいけないので、エクセルVBAでアプデ処理できない
なのでVBSでセンドキーしてたんだけど、APIなら画面ロック状態でもOKと
でも素のVBSでAPIを使うには、エクセルを呼び出すと(エクセル4マクロ)
お、パワーシェルはAPIが使えるスクリプトか、やっと使う時が来た
ググると MessageBox のサンプルはあるものの、肝心の FindWindow と PostMessage のサンプルがない
MessageBox なんかどんなバッチで使うんだと
適当に書いてみたら、しれっとウィンドウハンドル0で沈黙
ググったら、管理権限がどうとかいう話もあり、それ以上は調べてないけどハマり警戒で断念
その話がほんとだとすると、サードパーティー製のアドインを起動してる標準ユーザーに管理権限を持たせるわけにいかない(スパイ警戒)
お、ワードにもVBAあるじゃんかで普通に解決w
VBA最強w
バッチはVBAとDOSが安定
ドキュメントを持たないVBAのみのスクリプト、「VBAS」をリリースした方が良かったんじゃないかね
(パスワードの暗号化だけパワーシェル使ってるが)
もっと言うと、VBAでドットネットコンポーネントを呼べるようにするとか(呼べる?)
んでパワーシェルはわざわざ長い名前のドットネットコンポーネントを呼び出してセンドキーのサンプルばかり
センドキーならVBAでもVBSでもいいじゃんていう
名前も短いし
517:デフォルトの名無しさん
20/08/29 13:37:55.53 z6uRv8YY.net
関係ないけどアクセス権て、最重要が情報漏洩、つまり読み取り権限であって、インストール権限なんかどうでもいいんだよな
ソフトなんか他社製だし秘密でもなんでもない
壊れても、再インストールするだけ
518:デフォルトの名無しさん
20/08/29 13:53:57.66 z6uRv8YY.net
ていうか WindowsUpdate や OfficeUpdate がまさにその考え方だよね
最新化は自動であるべきで権限は不要
Officeのアドインもそうあるべき
初回だけ許可が必要で、アプデは自動
519:デフォルトの名無しさん
20/08/29 16:26:04.73 BYm68LqT.net
ID:z6uRv8YY
スレ住民に言いたいこと・聞きたいことがあるのであれば、もう少し簡潔に書いてもらえませんか?
あと、2~3行ならともかく >>516 ぐらいのボリュームで書くなら、読点だけじゃなく句点も省略しないほうが良いですよね。正直、読みづらい。
申し訳ないのですが、斜め読みすら断念しました。
520:デフォルトの名無しさん
20/08/29 17:29:18.45 uW7NzDft.net
>>519
読む必要ないよ
PS腐してVBAマンセーしてるだけ
セキュリティの基本も知らず、rwxのxなんて無意味って宣ってる
521:デフォルトの名無しさん
20/08/29 21:29:35.58 2f/XylsB.net
スタートメニューを右クリックしたら、
一般ユーザー用・管理者用の、2種類のPowerShell がある
コードも管理者用では、ExecutionPolicy だったか忘れたけど、特別な書き方がある
522:デフォルトの名無しさん
20/08/30 10:18:34.85 j2JU6h3h.net
>>520
セキュリティの基本が分かってないのはマイクロソフト
マイクロソフトはメーカーだからシステムを守ることをセキュリティと勘違いしてる
守るべきはユーザーの持つ秘密情報
プログラムが改変されようとも、最終的にそのユーザーコンテキストで読めてはいけないデータにアクセスできなければよい
プログラムは壊れても再インストールできるが、情報漏洩は回復できない
523:デフォルトの名無しさん
20/08/30 10:21:08 j2JU6h3h.net
相変わらず、無内容の人格攻撃文化
腐ってんね
524:デフォルトの名無しさん
20/08/30 11:22:28.54 roK+ZKVb.net
>>522
「MS は基本がなってない!MS よりも、俺のほうが正しいぞ!」
で、あなた様はどんなバックグラウンドを持つお方で、これまでどんなことを成してきた方なのですか?
525:デフォルトの名無しさん
20/08/30 11:25:22.99 6EFwsuE9.net
>>523
自分の無理解を棚上げしてスレ違いでむやみにあちこち叩くの辞めた方が良いよ
人に教えを請う立場の書き込みにはとても見えない
PSスクリプトの実行に必要なのは監理者権限ではなく適切な実行ポリシーの設定
これだけ教えてあげたんだからもうここには書き込まず一人で調べてね
526:デフォルトの名無しさん
20/08/30 13:47:22.04 e/T9q/5N.net
昔からマイクロソフトをdisって一人前面する技術者は一定数いた
527:デフォルトの名無しさん
20/08/30 14:37:48.96 Y6JzX6tf.net
「Microsoftのバグ」との戦い
URLリンク(xtech.nikkei.com)
528:デフォルトの名無しさん
20/08/30 15:57:42.01 PraMtyj1.net
>>526
M$とか書く奴おるねw
529:デフォルトの名無しさん
20/08/30 17:34:08 6ShNfOXb.net
>>521
管理者権限じゃないと実行出来ないコマンドを使う時用くらいの認識しかなかったわ
530:デフォルトの名無しさん
20/08/30 21:51:36.19 g5q4aE3p.net
Microsoftは「製品の問題点」と「仕様」を最初に明確にするので、それも批判されてたよね。
Linuxの場合、サポートを提供するベンダーで「バグと仕様を明確にできる」のはRedhatくらい。
その他のベンダーは明確にすることが出来ない。
Kernel作ってるのは他人だから。
「仕様として今後も維持される動作」か「バグとして修正される動作」か即座に知ることが出来るのは、待たずに作業を続けられるので、とても良いことのように感じるけど、実際は批判が多い。
531:デフォルトの名無しさん
20/08/31 01:56:18.43 Sr2UUXBk.net
ついに公務員の副業が解禁される時代が到来した
URLリンク(hybridstyle.net)
フリーランス市場規模が20兆円を突破 -副業は8兆円-
URLリンク(hybridstyle.net)
時代は週休3日制へ【週休3日制導入企業まとめ】
URLリンク(hybridstyle.net)
会社員の副業が急増、副業フリーランス4年で3倍、経済規模は約8兆円??副業収入は平均74万円
URLリンク(www.businessinsider.jp)
本業のストレス解消、副業で月70万、転職のお試し…会社に内緒で副業する人たちの本音
URLリンク(www.businessinsider.jp)
どんな仕事でいくら稼いでいる? 副業をしている13人に聞いたそのリアル
URLリンク(www.businessinsider.jp)
会社が個人を縛り付ける時代は終わった。これからは、個人が仕事を求めて、チャンネルのように会社を切り替えていく。
URLリンク(www.wantedly.com)
誰も教えてくれなかった「フリーランスは厳しい」ではなく「甘い」という真実。
URLリンク(www.wantedly.com)
【特集】年収1000万円以上「フリーランスの流儀」vol.2
URLリンク(tabi-labo.com)
「排出物ゼロ、廃棄物ゼロ、貧困ゼロ」究極のエコ・リゾートがフィリピンに
URLリンク(tabi-labo.com)
仕事は9割外注すれば売り上げが爆増する
URLリンク(headlines.yahoo.co.jp)
532:デフォルトの名無しさん
20/09/01 22:23:09.69 cXm81OcM.net
>>525
だって教えを請う立場じゃないから
それはそっちの勝手な思い込み
「普通に解決w」と言ってる通り、文字通り
出来事の感想を述べただけ
533:デフォルトの名無しさん
20/09/01 22:34:51 mz7Z6faK.net
>>532
「MS は基本がなってない!MS よりも、俺のほうが正しいぞ!」
の次は
「俺は教えを請う立場じゃない」
ですか。Ruby厨に次次ぐ逸材が登場ですね。
で、あなた様はどんなバックグラウンドを持つお方で、これまでどんなことを成してきた方なのですか?
534:デフォルトの名無しさん
20/09/01 22:57:48.88 XzhpNrm1.net
>>532
そんなのここじゃなくてTwitterにでも書いてろよ
535:デフォルトの名無しさん
20/09/01 23:15:36.13 cXm81OcM.net
>>524
ところで
建物でいうと、プログラムは家電等の快適装備
ユーザー情報は金庫
A.家電の設置
B.金庫の開錠
どっちがセキュリティレベル上かね?
どうも(MSというより)メーカーは、Aを最高権限と考えてる様子
(コンピューターでは物理的に、金庫機能も家電の1つに過ぎないからだろうけど)
ボタンをユーザーが押したからなんなのか
コンビニの年齢確認と同じで、何を確認したのか
ダイアログでベンダーを確認したか?
リアルな名称のダイアログなんか簡単に作れる(続く)
536:デフォルトの名無しさん
20/09/01 23:15:52.09 cXm81OcM.net
>>524
(続き)
たとえ本物でも、ベンダーに悪意がないことをどうやって確認するのか
まして国が株価操縦してるモラル破壊な社会、大企業だからって信用できない
そこで
A.保護ユーザー(管理者)
B.実行ユーザー(標準)
こう分け、Bでベンダーソフトを実行すれば、Aの機密情報を読めない
と思いきや、アプデ時に昇格ボタンを押してしまうと、なんでも読める権限で実行される
ボタンをユーザーが押そうがバッチで押そうが同じ
全くセキュリティになってない
ならば、あえてBを管理者にし、B自身のコンテキストでアプデさせる
Aのフォルダから「Administrators」を外しておけば、
インストール権限がありながら、Aの機密情報を読めない、はず
(この時、所有権や偽装でUACが反応しない状態なら、
その特権からも「Administrators」を外し、かわりにAを設定しておく)
537:デフォルトの名無しさん
20/09/01 23:16:32.08 cXm81OcM.net
>>524
くしくも偶然一部を書いてたが
スレリンク(tech板:876番)-877
さらに言うと、複数の権限があり、ケルベロスによってサーバー機能による高速取込までユーザーコンテキストを通したシステム
ユーザー問合せに即時対応するため、操作ログも一元管理される
操作ログは全ユーザーに追加権限だけがあり、閲覧はシステム権限が必要
アクセス権はテーブル自身にあり、どのようなルートからも突破不可能
行政手続に係る深いプライバシーを大量に扱うので、情報漏洩が命取りになる企業
しかし、そういう別件逮捕のようなことを、「人格攻撃」と言う
別件が議論に関係してはならない
それにプライバシー侵害は「誹謗中傷」の要件の一つ
①嘘(無根拠な憶測)、②プライバシーの侵害、③人格攻撃、「誹謗中傷」の3要件を全部兼ね備えるというw
で、お前は何をしたのか
こっちは人格攻撃気質じゃないので、当然興味ないが
538:デフォルトの名無しさん
20/09/01 23:29:07 XzhpNrm1.net
>>535
下手な例えをだすのは無理解の証
>>536
昇格ボタン押せる時点で既に怪しい
まともな運用してたら昇格ボタン押すのに監理者のアカウントが必要
例え昇格ボタンを押しても読み取り権限が得られるとは限らない
これもまともな運用してたら所有者にしか読み取り権限は得られない
つまりユーザーフォルダ内は当該ユーザーしか読み取れないのがまともな運用
結局無理解由来の誤解なわけで、まさに>>527
539:デフォルトの名無しさん
20/09/04 06:56:56.59 BT/SeEq8.net
客先も何も自社もポリシー変更できないからバッチは実行できないわ
簡単なファイル操作とかも.batでやることになってる
Powershellに移行できない
540:デフォルトの名無しさん
20/09/04 08:30:44.47 PFscGLUJ.net
ps1をポリシー付きで呼び出す1行バッチを書けばいいんじゃない?
冗長だけどbatをメンテするのに比べたらずっといいと思う
541:デフォルトの名無しさん
20/09/04 09:00:17.63 nHf7diD2.net
CurrentUserすら許さずbatはOKって
客先はともかく自社でそれは謎
542:デフォルトの名無しさん
20/09/04 10:38:48.17 HOWqt3vZ.net
>>539
まともな情シスを抱えていて、かつ運用ルールが徹底している会社なら、
きちんと申請すれば大丈夫なように思えるけど。
543:デフォルトの名無しさん
20/09/04 10:55:49.00 9bn0no2k.net
Powershellってマイクロソフト提供のスクリプトですら証明書の期限切れがあるからちょっと不安になる
544:デフォルトの名無しさん
20/09/04 11:00:10.92 Z5LzkW/+.net
>>543
無期限の証明書作れる方がヤバいでしょ
545:デフォルトの名無しさん
20/09/04 17:55:32.72 pFNwt9H1.net
まぁそれはそうなんだけど10年後にいきなり動かなくなると軽くパニックになるのは容易に想像できる
って言うか何件か証明書切れを経験すると不安になるのも理解できる
546:デフォルトの名無しさん
20/09/04 21:29:53.57 GUj1t4WA.net
MSの怖いところはいつサポートを切られても文句が言えないんだよな
よくそんなもん使うよ
547:デフォルトの名無しさん
20/09/04 22:08:14.36 r9WlhdFA.net
vbsなんてもうサポートされてないけどドメインのログオンスクリプトでいまだに大活躍ですよ
548:デフォルトの名無しさん
20/09/04 22:37:22.42 2uatcP4v.net
>>546
いつ切られるかなんて話ならApple製品の方が問答無用
549:デフォルトの名無しさん
20/09/04 22:48:13.98 HXgxD56a.net
MSほど後方互換性に配慮する企業はない
550:デフォルトの名無しさん
20/09/04 22:50:13.00 yQcUkcYq.net
>>546
Googleって知ってる?
551:デフォルトの名無しさん
20/09/04 23:13:47.33 pFNwt9H1.net
サポートガーとか言い出したらすべてのソフトメーカーも同じだしMSはサポート期間を明示してる分マシな方
552:デフォルトの名無しさん
20/09/05 00:41:16 /H4NwAXT.net
オープンソースじゃないから的なやつでしょどうせ
553:デフォルトの名無しさん
20/09/05 01:11:02.97 F930ZZ+s.net
しかもMSは予告したサポート期間切れたようなのでも
なんだかんだズルズルと最低限のサポートはしよるしな
554:デフォルトの名無しさん
20/09/05 09:05:47.68 Z+0szYX9.net
オープンソースでも、誰もメンテしなくなったらサポート切れたと同じになるけどな
555:デフォルトの名無しさん
20/09/05 09:29:26 5bXKo+C7.net
>>549
Win10 で未だに VB6 が公式にサポートされているのは驚異的だわな
556:デフォルトの名無しさん
20/09/05 14:23:09.94 NgOfEUV/.net
VB6のサポートって切れたんではないの?
でも実際にWin10でもそれなりに動くってことは
相当配慮してるんだろうね
557:デフォルトの名無しさん
20/09/05 14:38:02.26 poolRPMo.net
>>556
> VB6のサポートって切れたんではないの?
IDEの話と混同してないか?
Microsoft は、Windows Vista、Windows Server 2008 (R2 を含む)、Windows 7、Windows Server 2012、Windows Server 2012 R2、Windows Server 2016、Windows 8.x、および Windows 10 上で実行される既存の Visual Basic 6.0 アプリケーションをサポートすることにコミットしています。
URLリンク(docs.microsoft.com)
558:デフォルトの名無しさん
20/09/05 14:41:51 5bXKo+C7.net
>>556
これ。言葉足らずだったけど、ランタイムのほうね。
URLリンク(docs.microsoft.com)
559:556
20/09/06 12:44:28.70 K+uwWPzG.net
>>557-558
ああ、そうなのか。
どうりでうちの開発現場でエラーが出まくってるのに
無理やりIDEをインストールしてた訳だわ。
当然まともに動かなくてソース見る用になってたがw
560:デフォルトの名無しさん
20/09/06 21:35:48.31 zycnfOVF.net
PowerShell Core6.xはサポート終了したけどね
URLリンク(docs.microsoft.com)
561:デフォルトの名無しさん
20/09/07 10:29:11.62 LrNxLO4b.net
教えてください!
数学関数よく使うので、[math]打たなくていい方法ありませんか?
pythonだと
from hoge import *みたいなやつです。
usingの使い方はよく分かりませんでした…
562:デフォルトの名無しさん
20/09/08 13:39:15 Czt9vV5Q.net
RubyってNGした方がいいの?
563:デフォルトの名無しさん
20/09/08 14:06:08.38 4U/U3HlV.net
うん
564:デフォルトの名無しさん
20/09/08 21:32:03.60 gglleEZ2.net
>>561
クラス名なので省略出来ない
$m = [System.Math];
$m::PI;
でちょびっとだけ短くなるけど
565:デフォルトの名無しさん
20/09/09 14:10:00.30 dcbbv6DU.net
>>564
ありがとうございます!
566:デフォルトの名無しさん
20/09/09 17:56:46.99 COY4N7BF.net
>$m = [System.Math];
これって$mに何を代入してることになるの?
567:デフォルトの名無しさん
20/09/09 21:07:17.97 Mz5kQg8j.net
System.Mathを表すTypeクラスのインスタンス
C#のtypeof(System.Math)に相当する
568:デフォルトの名無しさん
20/09/09 23:13:42.66 COY4N7BF.net
>>567
ありがとうございます
インスタンスとして受け取ったからstaticメンバーは参照できるのか
何でもありだな
569:デフォルトの名無しさん
20/09/10 18:44:59.29 tjN1C/3z.net
Typeクラスのインスタンスが特定のクラスとして振る舞うのか。
オブジェクト志向のメタ構造というか自己言及的というか、
頭の悪い俺はクラクラしてくる。
570:デフォルトの名無しさん
20/09/10 21:10:45.59 Cm2gzsSs.net
"".GetType()::IsNullOrEmpty("foo") なんてものもちゃんと動く
わざわざこんな書き方するメリットは知らん
571:デフォルトの名無しさん
20/09/11 22:50:14.76 7Cy3Hp6X.net
Type型クラスがクラスとして振る舞うんじゃない
静的メンバ演算子(::)がRuntimeType型の値と文字列値を取って、静的メンバを返す
だから
$parent = [System.Math];
$child = "E";
$parent::$child;
はちゃんと評価される
572:デフォルトの名無しさん
20/09/13 12:34:16.51 pT8kzvft.net
whileの条件式がうまく動かないので教えてください。
Test-NetConnectionでサーバのポートが開いているかチェックして
開いていなかったら、開くまで待つ処理をしたいのですが、
なぜかWhileループに入ってくれません。
条件を$result -ne "True"にすればうまく動くのですが、なぜFalseの条件だと動かないのでしょうか
あとTest-NetConnectionでポート開いていないときにWARNINGメッセージが表示されるのですが
これって表示抑止できませんか?
コード
$ProgressPreference="SilentlyContinue"
$ErrorActionPreference = "silentlycontinue"
$server = "127.0.0.1"
$result = Test-NetConnection $server -port 22 -InformationLevel Quiet
while ($result -eq "False") {
Write-Output "OFF"
$result = Test-NetConnection $server -port 22 -InformationLevel Quiet
}
write-host "kaishi"
573:デフォルトの名無しさん
20/09/13 12:53:42.29 NB1HNIe8.net
Booleanと文字列を比較してるからかなぁ
while ($result -eq $false) {
にするとか
while ($result.ToString() -eq "False") {
にするとか
574:デフォルトの名無しさん
20/09/13 12:59:04.71 gjBM/R2S.net
>>572
$result -eq $false
575:デフォルトの名無しさん
20/09/13 13:03:07.97 pT8kzvft.net
while ($result -eq $false) {
でうまく動きましたー!ありがとうございました
trueは文字列比較で動くのにfalseはダメなのは不思議です。
576:デフォルトの名無しさん
20/09/13 13:10:32.29 NB1HNIe8.net
trueの場合には-neにしてたから、動いてる様に見えただけなんじゃね?
577:デフォルトの名無しさん
20/09/13 16:28:25.02 Bx4nil+B.net
while (!$result)でよくね
578:デフォルトの名無しさん
20/09/13 18:29:23.50 NpK7vu/k.net
当世風だなw
579:デフォルトの名無しさん
20/09/13 22:52:54.65 XEIeaeUL.net
/1GBとかやると容量計算が捗るのを今日知った
580:デフォルトの名無しさん
20/09/13 23:32:26.16 NpK7vu/k.net
>>579
こういう風には使えないんだね。残念。
get-childitem C:\Windows | select fullname, length/1KB
581:デフォルトの名無しさん
20/09/14 08:38:10.64 Cd/NVq2C.net
get-childitem C:\Windows | select fullname,@{N="length";E={$_.length/1KB}}
582:580
20/09/14 15:59:14.68 O60yV8/t.net
>>581
( ;゚Д゚)マジカ…
583:デフォルトの名無しさん
20/09/14 21:11:25.52 zNRePcSL.net
ドキュメントにも載ってる公式機能よ
URLリンク(docs.microsoft.com)(v=technet.10)#-property-object
URLリンク(docs.microsoft.com)(v=technet.10)#%E4%BE%8B-4
584:デフォルトの名無しさん
20/09/14 22:36:01.27 O60yV8/t.net
おみそれしました。参考にしまつ (=゚ω゚)ノ
585:デフォルトの名無しさん
20/09/15 17:44:30.49 vvfuKi+i.net
会社のパソコンでvscodeでのスクリプト作成
しようとしているのですが
下記問題に当たって苦しんでいます。
助言ください
1.vscodeのextentionのインストールができない。
→会社ネットワークは認証付きプロキシ環境なのでその設定が必要ぽいが設定してもダメ、とりあえずファイルを個別にインストールして対処
2.powershellデバッグしようとすると、初めて使うモジュールの分析をしています。と表示されて進まない
対象モジュールはpackagemanegement.psm1 1.4.7
これもプロキシの問題でインストールに苦労しました。
586:デフォルトの名無しさん
20/09/15 17:51:28.05 7Yffzl/8.net
>>585
認証付きプロキシでも普通に使えてるけど…って思ったらいくつもissue上がってるし、こっちの環境でも「XHR failed」ってエラーになるな
587:デフォルトの名無しさん
20/09/24 09:55:49.02 R8JuKz31.net
>>262
selectに -expandpropatye みたいなのを足せば何とかなるかも…
588:デフォルトの名無しさん
20/09/25 01:41:03.68 hFZS0B6G.net
ヒアドキュメントの変数使う時に変数を前方参照(後方参照?)したいんですが、
できませんかね
# スクリプトの頭の方で参照したい
$heredoc
# ヒアドキュメントはスクリプトの後ろにまとめたい
$heredoc = @`
abc
`@
589:デフォルトの名無しさん
20/09/25 01:55:05.65 mGml3uVc.net
Ruby でも、出来ない
590:デフォルトの名無しさん
20/09/25 04:02:41.97 pAwXdRR4.net
>>588
それって静的変数みたいなものですかね?考え方は
591:デフォルトの名無しさん
20/09/25 22:07:41.04 hFZS0B6G.net
UNIX系のシェルの仕様見ても前方参照できるようなことは書いてなありませんでした
だめっぽいですね
一旦ファイルとして後ろまで読むみたいなアクロパティックな方法しかなさそう
592:デフォルトの名無しさん
20/09/25 22:15:02.42 5mEzuFCz.net
自分自身をファイルオープンして末尾を読み出すとか。
昔、自分自身を解凍するシェルスクリプトがUNIX系アプリのインストーラとしてよく使われてたよね