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系アプリのインストーラとしてよく使われてたよね
593:デフォルトの名無しさん
20/09/25 22:17:06.26 5mEzuFCz.net
おっと書かれていたか
594:デフォルトの名無しさん
20/09/25 23:45:08.08 BU0fUt+3.net
処理をスクリプトブロックや関数の中に入れてもいいなら
$f = {
echo $heredoc
}
$heredoc = @`
abc
`@
. $f
595:デフォルトの名無しさん
20/09/26 22:07:47.79 BjfAYIo4.net
わけがわからん現象にでくわした
シンボリックリンク作成権限を付けたユーザーなんだけど
New-Item -Type Directory -Name dir
New-Item -Type SymbolicLink -Name sym -Target dir
これを管理者で実行すると SYMLINKD になるんだけど
管理者にならずに実行すると SYMLINK になるのはどういうこと?
596:デフォルトの名無しさん
20/09/27 09:30:31.69 HvAokpg1.net
chcp 65001
をやっても画面のユニコード文字列が文字化けするのはなんで?
597:デフォルトの名無しさん
20/09/27 11:16:54.85 4AaMSaam.net
>>596
[Console]::OutputEncoding = [Text.Encoding]::UTF8
これだとどう?
598:デフォルトの名無しさん
20/09/27 11:18:33.39 4AaMSaam.net
>>596
あと、いちどここ見てみたら
URLリンク(www.vwnet.jp)
599:デフォルトの名無しさん
20/09/27 12:01:00.23 45wzgCn0.net
Windows Terminalは絵文字とかもちゃんと表示できるらしい、使ってないけど
600:デフォルトの名無しさん
20/09/27 16:37:33.79 zpUujZFe.net
管理者にならずに New-Item でフォルダーへのシンボリックリンクを張ると
SYMLINKD でなく SYMLINK ができるという >>595 なんだが
PowerShell を C:\Users\ユーザー で起動した場合だけ起こるっぽい
Windows PowerShell では起きないし、起動フォルダーを変えても起きない
なんだこれ?
601:デフォルトの名無しさん
20/09/27 18:25:49.52 4AaMSaam.net
>>600
うちの環境 (Win10 2004) だと以下の通り。いずれもシンボリックリンク作成権限を与えた一般ユーザ。
PowerShell 5.0
開始ディレクトリに関わらず、再現せず
PowerShell 7.0.3
開始ディレクトリに関わらず、再現する
よく分からんね。
602:デフォルトの名無しさん
20/09/27 21:02:03.10 qVXRXcgH.net
昔からpsのアクセス権周辺の実装は怪しいと思ってる
専用コマンド呼ぶなり.NET呼ぶなりした方がいいよ
603:デフォルトの名無しさん
20/09/27 22:00:17.33 zpUujZFe.net
なぜうち(Win10 1909 18363.1082)では起動フォルダーで挙動が変わるんだろう
C:\Users\ユーザー で起動した PowerShell 7.0.3 だと、どこで New-Item しても発生する
その PowerShell で、さらに PowerShell を起動すると
C:\Users\ユーザー で起動した場合は、どこで New-Item しても発生する
別のフォルダーで起動した場合は、どこで New-Item しても問題ない
こうなる理由が予想もできない
604:デフォルトの名無しさん
20/09/27 23:03:00.71 zpUujZFe.net
あーごめん
管理者でも C:\Users\ユーザー で起動したら発生した
管理者になるかどうかは関係なかった
理由はさっぱりだが……
605:デフォルトの名無しさん
20/09/28 10:27:40.26 6RK1A/yN.net
>>601 >>604
もしかすると、
1. ターゲットをフルパスで指定する
2. ターゲットの相対パスを「.\\」か「./」で始まる形式で指定する
3. New-Item の直前に [Environment]::CurrentDirectory = Get-Location を実行する
のどれかを試すと、PowerShell 7 でも問題は起こらなかったり?
606:デフォルトの名無しさん
20/09/28 20:33:13.25 1OU6a08X.net
試した
1 〇 (でも張りたいのは相対パスのリンク)
2 ×
3 〇
[Environment]::CurrentDirectory を基準にターゲットのフルパスを求めて
フォルダーだったら SYMLINKD 、それ以外は SYMLINK を作ってるっぽい
# >>603 を書く時 C:\Users\ユーザー では試してなかった……。
カレントディレクトリを移動しても [Environment]::CurrentDirectory は変わらない
となると悪いのは
カレントディレクトリを返さない [Environment]::CurrentDirectory ?
それとも [Environment]::CurrentDirectory を参照する New-Item ?
607:デフォルトの名無しさん
20/09/29 11:44:19.44 xkYzZNyK.net
>>606
ごめん。ソースの履歴を見たら、v7.0.3 のときは、2. の方法は無意味だったみたい。
v7.0.3 の実装は、>>606 さんの想像のとおり。
そもそも、ターゲットの相対パスを解決するときの基準は、カレントのパスではなくて、
シンボリックリンクそのもののパスだよね。
なので、プロセスのカレントディレクトリ([Environment]::CurrentDirectory)の代わりに、
PowerShell のカレントロケーション($PWD)を基準にしたとしても、やっぱりバグる。
New-Item -Type Symbolic -Name Foo\Bar -Target .\Zot みたいなケースとか。
でね。最新のソースには、相対パスのターゲットのための修正が施されているのだけれど、
これが、「.\」か「./」で始まるパスのときは、基準にカレントロケーションを使う、
という中途半端かつ誤ったもので...。
608:デフォルトの名無しさん
20/09/29 20:49:56.27 J7wCjMtV.net
常に リンクのフルパス → ターゲットのフルパス とたどるだけなのに……w
早く修正されますように
609:デフォルトの名無しさん
20/09/30 08:50:32.18 6kAerFE6.net
[Environment]::CurrentDirectoryや[IO.Directory]::GetCurrentDirectory()の罠
他のモジュールも同じ問題を抱えてないか心配になる
610:デフォルトの名無しさん
20/10/01 10:19:36.95 tnCBqate.net
New-Itemはハードリンクもバグってる
こっちはWindows以外のOSでも問題になるはず
New-Item -Type Directory -Name linktest
New-Item -Name linktest\target
New-Item -type HardLink -Name linktest\hardlink -Target linktest\target
に対して、こんなメッセージでエラーになってしまう
New-Item: Could not find item linktest\target.
興味深いのは
New-Item -Type HardLink -Name linktest\hardlink -Target target
と間違えてみると
New-Item: Cannot find path 'カレントディレクトリ\target' because it does not exist.
ちゃんと正しいエラーメッセージが返る
不思議だ
611:デフォルトの名無しさん
20/10/01 21:05:38.94 NSqrZd61.net
>>610
>New-Item -type HardLink -Name linktest\hardlink -Target linktest\target
5.1と7.0.3で試したけどエラーにならなかったぞ
612:デフォルトの名無しさん
20/10/01 21:26:37.01 tnCBqate.net
これでどう? (長すぎて切れるかも)
$origCurDir = [System.Environment]::CurrentDirectory
New-Item -ItemType Directory -Path linktest
Push-Location linktest
New-Item -ItemType Directory -Path dir
Push-Location dir # linktest/dir
New-Item -ItemType Directory -Path subdir
Set-Content -Path file -Value "hello"
New-Item -ItemType HardLink -Path hardlink_1 -Value file
New-Item -ItemType SymbolicLink -Path symlink_1 -Value subdir
Pop-Location # linktest
New-Item -ItemType HardLink -Path dir/hardlink_2 -Value dir/file
New-Item -ItemType SymbolicLink -Path dir/symlink_2 -Value subdir
Push-Location dir # linktest/dir
[System.Environment]::CurrentDirectory = $PWD
New-Item -ItemType HardLink -Path hardlink_3 -Value file
New-Item -ItemType SymbolicLink -Path symlink_3 -Value subdir
Pop-Location # linktest
[System.Environment]::CurrentDirectory = $PWD
New-Item -ItemType HardLink -Path dir/hardlink_4 -Value dir/file
New-Item -ItemType SymbolicLink -Path dir/symlink_4 -Value subdir
Pop-Location
[System.Environment]::CurrentDirectory = $origCurDir
Get-ChildItem -Path linktest/dir | Sort-Object -Property CreationTime | Format-Table Attributes,LinkType,Target,Length,Name
613:デフォルトの名無しさん
20/10/02 13:25:40.85 1QpEVKY8.net
mklink一行でええじゃん
614:デフォルトの名無しさん
20/10/02 13:57:48.64 w3BWfVBY.net
>>613
これを思い出した
********
アメリカのNASAは、宇宙飛行士を最初に宇宙に送り込んだとき、
無重力状態ではボールペンで文字を書くことができないのを発見した。
これではボールペンを持って行っても役に立たない!
NASAの科学者たちはこの問題に立ち向かうべく、10年の歳月と120億ドルの開発費をかけて研究を重ねた。
その結果ついに、無重力でも上下逆にしても水の中でも氷点下でも摂氏300度でも、
どんな状況下でもどんな表面にでも書けるボールペンを開発した!!
一方、ソ連は鉛筆を使った。
615:デフォルトの名無しさん
20/10/02 14:35:00.30 Ck+HovvX.net
リンクを張ることが目的なのではない
PowerShellの不具合を見つけることが目的なのだ
616:デフォルトの名無しさん
20/10/02 21:34:24.75 ljpWPhwK.net
誰か英語ができる人 >>612 のテストを添えて「New-Itemでのhardlink/symlink作成に
[Environment]::CurrentDirectoryが影響する」ってタイトルでイシューを立てて欲しい
617:デフォルトの名無しさん
20/10/03 01:55:55.82 0vVVHGK+.net
昔はよくConnectに投稿したりしたんだけどねぇ
618:デフォルトの名無しさん
20/10/03 10:45:42.05 68v91MPk.net
よろしくお願いします
619:デフォルトの名無しさん
20/10/03 22:48:38.93 7NrhvCrT.net
バージョン上がって使いやすくなってきたねpowershell
Shellより扱いやすいからmacにもインスコしたわ
コンソールに貼り付けて実行した時に右クリックの貼り付けとctlvの貼り付けで動きが違うのは何で?
620:デフォルトの名無しさん
20/10/04 17:12:39.48 Pj4o9N0c.net
遅レスすまんね
>>597
だめだった
>>598
見てみる
621:デフォルトの名無しさん
20/10/07 01:28:53.25 OLUeUK9d.net
あるファイルを消そうとしたら「このファイルは開かれているため~」と表示されて消せなかった。
こういう場合、自分はリソースモニターでファイルを開いているアプリを探すんだけど
最近入った現場では管理者以外はリソースモニターを使えないように設定されていて困った。
それで質問なのですが、powershellのコマンドでファイルを開いているアプリを探す方法はあるのでしょうか?
622:デフォルトの名無しさん
20/10/07 02:03:23.70 HMBCuleJ.net
URLリンク(stackoverflow.com)
こんなん出てきたがどう?
623:621
20/10/08 03:04:42.09 daaVvwfY.net
>>622
めっちゃ参考になります。っていうかこれでやります。
サンクス!
624:デフォルトの名無しさん
20/10/08 19:15:35.07 zkqa7tbj.net
試せば判るけど >>622 はプロセスがロードしてるDLLとかのモジュールしか得られないよ
開いてるファイルはプロセスに紐付いてるハンドル取得して一個一個チェックするしかないよ
実装はpowershellじゃかなり大変だからhandle.exeっていうMSが公開してるツール使ったらいいよ
625:デフォルトの名無しさん
20/10/14 06:30:09.66 JjVHZHwh.net
セキュリティガチガチでネットにも繋がらないうちの現場じゃ無理だな
626:デフォルトの名無しさん
20/10/14 11:09:36.08 s64A8YK8.net
うちの会社は「キッコーマン」のHPが見れません、”コーマン”がフィルターに引っかかるのですw
627:デフォルトの名無しさん
20/10/15 21:32:35.73 vPm9QJ4K.net
openfiles コマンドでファイルを開いているプロセスを調べる 【 Windows】
URLリンク(tooljp.com)
Openfiles
URLリンク(web.archive.org)URLリンク(technet.microsoft.com)(v=ws.10).aspx
628:デフォルトの名無しさん
20/10/17 17:51:59.12 2b9DYeQb.net
職場で「さすがパワーシェラー!」って言われたんだけど
パワーシェルを使う人のことをそう呼ぶものなの?
629:デフォルトの名無しさん
20/10/17 17:57:10.05 Ske6VIT2.net
聞いたことないな
むしろ馬鹿にされてる気分
630:デフォルトの名無しさん
20/10/17 23:05:50.24 DNKik4OU.net
洋書で良い本ないですか?
和書だと数冊しか出てないので…
631:デフォルトの名無しさん
20/10/18 21:28:34.46 6x+7Jy+N.net
in actionは読んだのかね
あとはCoreのソース読んでくのが手っ取り早い
632:デフォルトの名無しさん
20/10/19 22:58:13.20 TaaQ8sH/.net
>>631
原書は第3版まで出てるんですね
ありがとうございます
633:デフォルトの名無しさん
20/10/24 21:41:19.65 1s91cR1z.net
多次元配列(ジャグ配列ではなく)を1次元配列に平坦化する高速な方法ありませんか?
データ数は100万個くらいです。
@($a | % {$_})
検索したら↑のカッコいい方法が出てきましたが、
私の環境で6秒ほどかかり速度に不満があります。
634:デフォルトの名無しさん
20/10/24 23:22:07.28 ZaC2aARH.net
パイプとForeach-Object自体が遅いからね
データがオンメモリにあるならforeach文のが速い
635:デフォルトの名無しさん
20/10/24 23:28:40.40 ZaC2aARH.net
あとは万個の繰り返し処理になるわけだからpowershellで書いたら全体的には当然遅い
対策としては繰り返し部分だけC#に渡すとかだね
636:デフォルトの名無しさん
20/10/24 23:45:12.07 V4Y88WB8.net
万個とかエッチ!
637:633
20/10/25 00:13:47.38 orpbcY2p.net
foreach文にすると0.8秒まで速くなりました!
とりあえずこの方法でやってみます
$b = foreach($x in $a){$x}
638:デフォルトの名無しさん
20/10/25 02:13:33.54 8PerFZ8f.net
>>636
美人穴が「この商品は累計○万個も売り上げたということです!」とかいうとおっきする
639:デフォルトの名無しさん
20/10/25 20:51:17.25 Bltg1B/v.net
>>633
>多次元配列(ジャグ配列ではなく)を1次元配列に平坦化する高速な方法ありませんか?
なんでジャグ配列ではなく多次元配列なんだろう
640:デフォルトの名無しさん
20/10/25 23:05:57.46 Ny8q0G3C.net
ジャグラーは定番だ
641:デフォルトの名無しさん
20/10/25 23:57:20.55 sGr6+tXm.net
多次元配列のほうがメモリ上で綺麗に配置されている分、高速化の選択肢が多いかもしれないって発想じゃね
642:633
20/10/26 00:00:33.37 R7zaLxag.net
>>639
ExcelファイルからCOM経由で範囲データを取ってくるとobject[,]になるためです
643:デフォルトの名無しさん
20/10/26 08:09:54.14 mujdTIU3.net
なんでそれを1次元にするんだろう
644:デフォルトの名無しさん
20/10/26 12:01:58.05 bVz9LMJg.net
>>641
実際には多次元配列の方が遅い
645:デフォルトの名無しさん
20/10/26 13:22:10.82 l+r11Fp5.net
>>644
理由は?
646:デフォルトの名無しさん
20/10/26 14:41:24.14 RInXL5ja.net
PowerShellというか.NETの仕様
.NETには1次元配列の要素にアクセスするための専用命令があるので速い
多次元配列の要素にアクセスするにはプロパティみたいなアクセサメソッドを使わなきゃいけないので遅い
647:デフォルトの名無しさん
20/10/26 16:19:55.73 l+r11Fp5.net
>>646
多次元だと倍以上遅いと言う根拠あるの?
648:デフォルトの名無しさん
20/10/26 16:27:11.02 RDi5ol2j.net
めんどくせー奴だな
649:デフォルトの名無しさん
20/10/26 17:00:59.84 XYschmPc.net
体感速度は変わらん
650:デフォルトの名無しさん
20/10/26 17:43:17.64 jItJ//Mq.net
>>647
自分で試せば良いんじゃね
651:デフォルトの名無しさん
20/10/26 17:46:52.74 l+r11Fp5.net
要は根拠もなしに
> 実際には多次元配列の方が遅い
と妄想をほざいてただけって話かよw
652:デフォルトの名無しさん
20/10/26 17:56:32.09 jItJ//Mq.net
>>651
うん、良いんじゃね、そういう結論で。
以上でよろしいか?
653:デフォルトの名無しさん
20/10/26 17:58:32.50 j+tAxxjP.net
>>651
質問に答えず茶化すだけかよw
654:デフォルトの名無しさん
20/10/26 19:30:32.27 l+r11Fp5.net
>>653
>>652に言ってくれよw
655:デフォルトの名無しさん
20/10/26 19:43:09.27 /01g7c5c.net
>>ID:l+r11Fp5
たくさん構ってもらえて良かったね
656:デフォルトの名無しさん
20/10/26 20:06:18.23 l+r11Fp5.net
>>655
恥の上塗りかなw
657:633
20/10/26 20:09:14.97 5qWbLIDu.net
>>643
Excelファイルから取得したデータを更に別の処理に使うのですが、その際に1次元で渡す必要があるためです
658:デフォルトの名無しさん
20/10/26 20:09:30.70 /TCFG/M1.net
実装としては添え字でメモリの位置を計算して参照するだけだから
一次元でも多次元でも原理的には速さは変わらないぞ
659:デフォルトの名無しさん
20/10/26 20:13:28.15 jItJ//Mq.net
>>656
きみが絶対的に正しいことはスレ住人の総意で共通認識なのだから、もう十分だろう?
そのへんで勘弁してもらないかな。なんなら土下座して謝るよ。
660:デフォルトの名無しさん
20/10/26 20:17:45.03 mujdTIU3.net
ちゃんとアンカー追えよ
ジャグ配列vs多次元配列が1次元vs多次元配列に化けてるぞ
>>647
>多次元だと倍以上遅いと言う根拠あるの?
「倍以上遅い」なんてどこから来たんだろう
661:デフォルトの名無しさん
20/10/26 20:28:30.59 l+r11Fp5.net
>>658
>>646によると専用命令があるらしいけど、嘘なのかね?
>>660
ああすまん、脳内で二次元配列 ⇔ ジャグ配列 って思ってたわ
まあ3次元以上なら専用命令とやらがもっと速くないとダメだけど
662:デフォルトの名無しさん
20/10/26 20:36:57.75 mujdTIU3.net
あんたはまず「倍以上」の出所を説明しないと
663:デフォルトの名無しさん
20/10/26 21:11:41.27 EAm4Av0T.net
URLリンク(www5b.biglobe.ne.jp)
> ILにも1次元配列については専用の命令が用意されています。
664:デフォルトの名無しさん
20/10/26 21:49:29.23 AmD6br2D.net
#2次元配列初期化
Measure-Command {
$i = 0; $array = New-Object "object[,]" 1000,1000
for ($x = 0; $x -lt $array.GetLength(0); $x++) {
for ($y = 0; $y -lt $array.GetLength(1); $y++) {
$array[$x,$y] = $i++
}
}
}
#ジャグ配列初期化
Measure-Command {
$i = 0; $array = New-Object "object[]" 1000
for ($x = 0; $x -lt $array.length; $x++) {
$array[$x] = New-Object "object[]" 1000
for ($y = 0; $y -lt $array[$x].length; $y++) {
$array[$x][$y] = $i++
}
}
}
たしかに初期化の段階でジャグ配列のが速いね
665:デフォルトの名無しさん
20/10/26 22:09:49.38 l+r11Fp5.net
>>662
ジャグ配列知らんの?
二次元相当のジャグ配列だと2回辿らないとダメだから倍は速くないとトータルで遅くなるでしょ
666:デフォルトの名無しさん
20/10/26 22:22:45.88 5/h2v6nN.net
>>665
PSで例見せてよ
667:デフォルトの名無しさん
20/10/26 22:37:25.27 l+r11Fp5.net
ILの話にPSとか言われてもw
668:デフォルトの名無しさん
20/10/26 22:48:42.22 l+r11Fp5.net
軽くググったら最近の.Net Coreとかだと状況次第って感じやね
URLリンク(takap-tech.com)
原理考えたらまあ妥当な結果だと思う
669:デフォルトの名無しさん
20/10/27 01:23:06.66 IPa2oLl3.net
なるほど勉強になります
670:デフォルトの名無しさん
20/10/27 13:37:08.15 bD3kPd/D.net
なるほど理解できません
671:デフォルトの名無しさん
20/10/27 15:37:54.18 az6RTKF7.net
処理系の実装に寄るけど、うまくインデックスを張れば
速度的には同等になるはずだけどな
672:デフォルトの名無しさん
20/10/27 19:29:05.55 k9DNZwa6.net
>>671
どういう理論なんだ?
ランダムアクセスだとジャグ配列は次元毎にメモリーアクセスして辿らないとダメだけど多次元配列ならインデックスの計算してその場所にアクセスするだけだから多次元配列の方が速い
シーケンシャルアクセスだとアクセスの多くは最後の次元のアクセスだから毎回インデックスを計算する多次元配列よりジャグ配列の方が速いと思う
まあめっちゃ最適化して多次元配列を1次元配列に展開するようなコードにまで落とせたら多次元配列の方が微妙に速くなるかも
673:デフォルトの名無しさん
20/10/27 19:52:31.91 Sd8akiyh.net
なんにせよ多次元配列を1次元配列に高速に平坦化する方法分からないんだろ
グダグダスレ引き延ばしておきながらなw
674:デフォルトの名無しさん
20/10/27 21:46:07.02 UFBDJ7q0.net
@($a)
Foreach-Objectもforeach分も要らない
675:デフォルトの名無しさん
20/10/27 21:47:10.61 UFBDJ7q0.net
foreach分 → foreach文
676:デフォルトの名無しさん
20/10/27 22:27:25.79 6aj92Tm3.net
>>673
そんな低レベルなことでドヤれるとか羨ましいわw
677:デフォルトの名無しさん
20/10/28 19:54:09.10 RpzUgl/d.net
>>674
>@($a)
PSってこんなオチが多いね
$aって打てば全部列挙されて出てくるんだからあれれとは思うんだけどさ
678:633
20/10/29 21:32:08.09 /oXwNFXj.net
>>674
返信遅れてすみません。
0.2秒まで速くなりました。
シンプルかつナンバーワンですね
目からウロコでした。
679:デフォルトの名無しさん
20/10/29 23:08:28.85 u3CTd5OP.net
>>677
こういうトリッキー系?は趣味PGならいいんだけど
業務PGに実装するには躊躇するんだよなあw
680:デフォルトの名無しさん
20/10/29 23:35:09.18 ebCj94Ij.net
え? これは常識では・・・
681:デフォルトの名無しさん
20/10/30 08:08:54.65 xvehW8+X.net
PowerShell使うならほぼ常識、てか知らないと辛いレベル
そもそもPowerShell自体が色々トリッキーな動作するし、特に配列周り
682:デフォルトの名無しさん
20/11/02 13:12:42.29 cgiVh2xg.net
$a = [Object[,]]::new(3,3); $a.Rank は 2
$b = $a; $b.Rank は 2
$b = & { $a }; $b.Rank だと 1
$b = $a + @(); $b.Rank でも 1
もちろん $b.Length はどれも 9
$b = $a が特例のように思えてきた
どうしてこうなるのかきちんと理屈が知りたい
683:デフォルトの名無しさん
20/11/02 14:39:03.01 Q6ZeZ8N8.net
配列での foreach の使用 (C# プログラミング ガイド)
URLリンク(docs.microsoft.com)
多次元配列の場合、右端の次元のインデックスが最初に加算されていき、次にその左の次元、またその左、というような方法で各要素がトラバースされます。
int[,] numbers2D = new int[3, 2] { { 9, 99 }, { 3, 33 }, { 5, 55 } };
// Or use the short form:
// int[,] numbers2D = { { 9, 99 }, { 3, 33 }, { 5, 55 } };
foreach (int i in numbers2D)
{
System.Console.Write("{0} ", i);
}
// Output: 9 99 3 33 5 55
684:682
20/11/02 17:29:09.65 cgiVh2xg.net
明示的な foreach の使用は興味がないなあ
$b = $a も $b = & { $a } も $a を $b に代入するのに
なんで結果が違うのかが知りたい
685:デフォルトの名無しさん
20/11/02 17:46:27.91 O692h/lZ.net
最初のやつ以外はシンプルな代入じゃなくて演算してるから、演算の結果が一次元配列になっただけじゃないの
686:682
20/11/02 17:50:23.99 cgiVh2xg.net
$b = & { $a } も演算?
具体的にどういう演算になるのかわからない
687:デフォルトの名無しさん
20/11/02 17:54:46.38 Razdsa9H.net
>>682
>$b = & { $a }; $b.Rank だと 1
>$b = $a + @(); $b.Rank でも 1
この2つは$aがそれぞれ評価されて1次元になって$bに代入されてる
$b = & { $a }
の場合$aの前にカンマを入れれば型は保たれる
$b = & { ,$a }
PowerShellの謎仕様
688:デフォルトの名無しさん
20/11/02 18:05:40.51 Razdsa9H.net
おそらくスクリプトブロックを通過するときと
右辺や左辺に置いて演算するとき
それぞれ1次元に変換されてしまう仕様みたい
689:デフォルトの名無しさん
20/11/02 18:07:36.92 O692h/lZ.net
>>686
起動演算子にスクリプトブロックを渡してるんだから演算でしょ
スクリプトで
$a
とだけ書くと$aが評価されて左上から順に9行分の出力が得られる
$b=&{$a}はその出力の代入になってる
690:682
20/11/02 18:14:48.39 cgiVh2xg.net
じゃあやっぱり単純な代入 $b = $a だけが特別で
それ以外は配列が展開されるってことか
理解した
>>687
& { $a } だと配列 $a が展開される
& { ,$a } にすれば配列の配列 ,$a が展開されて配列 $a がそのまま渡される
691:682
20/11/02 18:50:05.02 cgiVh2xg.net
あれ違うな
単純な代入だけでなく Comma operator も特例になるのか
692:デフォルトの名無しさん
20/11/02 18:58:29.51 WQUINiFK.net
>>691
特例だとか自分勝手な解釈をする癖を直さないと、他人とのコミュニケーションで苦労するぞ(主に周囲の人間の方が...)。
自分が既に頭の中に描いているイメージに合わせて無理に解釈方法を寄せていくのではなくて、本来理解すべき仕様の方に自分の中の理解を修正して近づけていく方がいいぞ。
693:デフォルトの名無しさん
20/11/02 19:13:13.99 eTL99CIn.net
ウザっ
694:デフォルトの名無しさん
20/11/02 19:59:31.61 D4NZ1UY1.net
>>692
TPO をわきまえられずトンチンカンな御高説垂れる人も、他人とのコミュニケーションで苦労するぞ(主に周囲の人間の方が...)。
695:デフォルトの名無しさん
20/11/02 20:30:51.76 Razdsa9H.net
>>690
原理的にはジャグ配列にして空評価させて返すで合ってると思う
恐らく処理系のソース読み込まないと判らないよ
配列返す関数作る時も同じ方法
696:682
20/11/02 20:44:58.19 cgiVh2xg.net
,$a は Comma operator で1要素の配列を返すけれど
その時に $a は展開されずに2次元配列のまま
これは単純な代入と同じ扱いだよね
697:デフォルトの名無しさん
20/11/02 21:48:13.16 Qlwbnxz+.net
{ $a } は { Write-Output $a } の事
Write-Output に配列を渡した時の挙動を考えればいい
URLリンク(docs.microsoft.com)
By default, Write-Output enumerates through collections provided to the cmdlet.
However, Write-Output can also be used to pass collections down the pipeline as a single object with the NoEnumerate parameter.
698:デフォルトの名無しさん
20/11/02 22:48:01.97 O692h/lZ.net
ウザかろうと思って特例云々につっこむのやめたけどやっぱり書くわ
代入は代入でしかなく特例も何もない
いつだって右辺の値をありのままの型と値で代入するだけ
$b=&{$a} というのを代入として認識するからおかしくなる
$b=$a.Rank と書いたら$bは数値になるわけだけど、代入したから数値になった!とは思わないでしょ
あくまで.Rankを評価した結果が数値になって、その数値を$bに代入したに過ぎない
$b=&{$a} も &{$a} の評価結果が一次元配列になる仕様なだけで、代入が何かの法則性に寄与している訳ではないし、一次元配列になるという一貫したルールや思想があるわけでもない
699:682
20/11/03 00:15:03.20 Da50zhuo.net
operand を展開してから operator にわたすんじゃなくて
operand をそのままわたして operator が展開したりしなかったりする
たぶん理解した
700:デフォルトの名無しさん
20/11/03 08:59:33.05 HUEo3Cdu.net
>>682 の$b = $a は$aの参照を$bに代入している
$a = [Object[,]]::new(3,3)
$b = $a
$b[0,0] = 1
echo $a[0,0] #=> 1
$b = & { $a } は { $a }というスクリプトブロックを実行して戻り値を代入する
{ $a } の意味は >>697 を見ろ
701:デフォルトの名無しさん
20/11/04 10:50:57.08 ZJcGuVz6.net
>>694
初学者が変な誤解すると二度と修正する機会ないからな
みんな巡り巡って自分が被る迷惑を未然に防ごうと必死なわけよ
702:デフォルトの名無しさん
20/11/04 20:48:58.85 0afqdDmu.net
いつの間にかヘルプの翻訳作業が始まってた
URLリンク(github.com)
703:デフォルトの名無しさん
20/11/07 21:29:59.64 AAgSLehy.net
こんなシェルを書きました。
function get_stop_code {
$hoge=(Get-Content stop_code.txt)
}
while ($true) {
get_stop_code
Write-Output $hoge
}
シェル実行中に、stop_code.txtの中身を書き換えても
get_stop_codeがファイルの中身を拾ってくれません
いろいろ試したら、こうしたらうまくいきました。がすっきりしません。
function get_stop_code {
$hoge=(Get-Content stop_code.txt)
Write-Output $hoge
}
while ($true) {
$stop_code=(get_stop_code)
write-output $stop_code
}
get_stop_codeがファイルの中身を、while ($true)の中でうまく拾ってくれる
書き方を教えてください。
704:デフォルトの名無しさん
20/11/08 00:25:05.60 gCrk6dnE.net
これって遅延展開系の話なのかな?
705:デフォルトの名無しさん
20/11/08 02:53:16.74 mlfH60EQ.net
スコープの話だと思うよ
関数の内側で変数を書き換えてもローカルスコープ内の変数の更新にしかならないので、関数から戻ったら値は書き換わってない
関数を次のように書き換えて明示的にスクリプトスコープの変数を更新してやればいい
function get_stop_code {
$script:hoge=(Get-Content stop_code.txt)
}
PSのスコープって特殊で悩ましい
特にループの初回、ほかの言語みたいに未宣言の変数だぞとエラーになってくれればまだいいんだけど、変数が作られて親からも見えちゃうから混乱する
706:デフォルトの名無しさん
20/11/08 08:09:56.71 0BM2Z5Uf.net
おれも一瞬ではなく数分、>>703の問題がわからなかった
とりあえず頭にSet-StrictMode -Version Latestを付けとけばエラーにはなる
707:デフォルトの名無しさん
20/11/08 10:11:33.41 vf10kFcr.net
>>705
ありがとうございます。
>関数の内側で変数を書き換えてもローカルスコープ内の変数の更新にしかならないので、関数から戻ったら値は書き換わってない
というのは、
>>703だと、
同じシェル内にある$hogeであっても、
①get_stop_code関数内の$hoge
②while ($true)内にある$hoge
の2種類があり、
while ($true)内で、get_stop_code関数を実行しても、
①の$hogeしか書き換わらないから、求める結果が得られない。
って事でしょうか。
708:デフォルトの名無しさん
20/11/08 12:20:50.04 mlfH60EQ.net
そんな感じ
関数はローカルスコープを作る
whileの方はその外側にあたるから親スコープになる
ちなみにPSではwhileブロックはローカルスコープを作らないのでスクリプト全体のスコープと同じ
709:デフォルトの名無しさん
20/11/08 14:40:55.27 vf10kFcr.net
>>708
ありがとうございます。
スコープですね、勉強になりました。
きっと、しっかり理解すれば便利な仕様なんでしょうが、
初学者にとっては罠でしかありませんね・・・こういうの・・・。
710:デフォルトの名無しさん
20/11/08 21:23:36.42 TgcNdU0w.net
about_Scopes
URLリンク(docs.microsoft.com)(v=wps.640)
711:デフォルトの名無しさん
20/11/09 11:42:35.91 tOFQB4no.net
ダイナミックスコーン
712:デフォルトの名無しさん
20/11/09 13:18:24.63 hpK1fX+1.net
>>707
その前にシェルという単語の使い方がおかしい
ファミリーベーシックで「ファミコン書きました」と言ってる感じで
恥ずかしいのでやめたほうがいい
713:デフォルトの名無しさん
20/11/09 13:43:05.15 6e3D9VGJ.net
シェルスクリプトはシェルスクリプトであってシェルではない
714:デフォルトの名無しさん
20/11/09 18:13:48.88 XoDGsHQu.net
今どきファミリーベーシックに例えても人に通じないぜーっ!!
715:デフォルトの名無しさん
20/11/09 18:47:25.54 8i+JRxOJ.net
べーしっ君はもっと通じないだろw
716:デフォルトの名無しさん
20/11/09 21:56:26.60 zTstc6LM.net
ショットシェルだったら散弾のことでちょっとかっこいいぐらいなのに…
URLリンク(hb-plaza.com)
717:デフォルトの名無しさん
20/11/09 22:20:12.83 7qqOuQ5J.net
ちょっと知れるね
718:デフォルトの名無しさん
20/11/09 22:31:51.42 NYGqo7nG.net
ポンタポイントが付くか楽天ポイントが付くかの違いで基本的には一緒だよ
719:デフォルトの名無しさん
20/11/10 02:41:01.00 TotITmpP.net
スクリプトスコープ以外にも、関数スコープがあるのは便利。
C, Ruby と同じ
関数スコープが無い言語は、プログラミングが異常に難しい
720:デフォルトの名無しさん
20/11/10 04:19:48.53 UHXHz0W1.net
その程度の事で「異常に」難しいんじゃ向いてないんじゃない?
多少面倒臭いなと思う事はあっても
721:デフォルトの名無しさん
20/11/10 04:24:34.34 /n5BB76T.net
再帰呼び出しで・・・
722:デフォルトの名無しさん
20/11/10 09:42:32.98 v1zmG+Gm.net
むしろローカル変数の恩恵に理解を示し、グローバル変数を強制されたら不安だと思う感性の方が普段たくさんプログラミングしてるんだろうなと感じる
変数iを使ったループの中でさらに別の変数iを使った関数を呼ぶと無限ループのバグになる
代わりにjにしようとか考えてると早晩行き詰まるので「i_関数名」みたいな変数名を常に使うことを思い付く
関数名は短くしたいと考えるようになって可読性がまずいことに
短いスクリプトしか書かない用途の言語ならいいけど、そうでないなら品質の低いコードを招く言語になるだろうな
723:デフォルトの名無しさん
20/11/10 13:37:25.83 xsn7mmhw.net
ローカルとグローバルの話はまあややこしいな
724:デフォルトの名無しさん
20/11/10 13:43:57.86 xsn7mmhw.net
自分のいる世界の常識が他の場所で通用するかどうか
それを生きていて初めて見せられた例がプログラミングのローカルとグローバルだった
なんていうPCヲタも少なくないだろうなあw
ブロック過ぎたらまっさらに戻る言語なら
関数が動かないと思ったらちゃんと戻り値にして出さないとなあ
報告連絡相談 と同じ
725:デフォルトの名無しさん
20/11/12 08:30:03.86 HWijez2q.net
Announcing PowerShell 7.1
URLリンク(devblogs.microsoft.com)