PowerShell -Part 3

1デフォルトの名無しさん2018/10/09(火) 17:46:48.32ID:G4IJkzod
前スレ
【最強CUI】PowerShell -Part 2
http://mevius.5ch.net/test/read.cgi/tech/1480109402/

3022992018/12/04(火) 19:47:12.62ID:eKuwOju4
VBS でも、ダブルクリックで実行できる?

3032992018/12/04(火) 19:58:07.57ID:eKuwOju4
ありがとう。
VBS でも、ダブルクリックで実行できた

ただ、黒い画面が表示された方が、わかりやすくない?
何秒ぐらい待つのか、迷う

304デフォルトの名無しさん2018/12/04(火) 21:38:59.01ID:gx9huxXd
Windows文化は「黒い画面」が出るのを良しとしないのだよ

305デフォルトの名無しさん2018/12/04(火) 22:20:16.69ID:SeIDr86X
>>304
そんなの一部の神経質な奴らだけ

306デフォルトの名無しさん2018/12/04(火) 23:31:35.16ID:RbfFY42H
>>305
Windows 文化と言うより、業務でオツちゃん・オバちゃんに使わせるシステムの場合、
あいだに黒い画面が一瞬出ると「なにこれ?」って無用な問い合わせが入ったり、
場合によっては無理やり閉じられることもある。
fool proof の観点からは黒い画面が無いに越したことはない。

307デフォルトの名無しさん2018/12/05(水) 20:37:03.12ID:x9ea9mMQ
" が含まれている文字列を環境変数にいれてnet useコマンドを使うと" がエスケープされず想定通りに処理されないのですがどうエスケープすればいいんでしょうか
シングルコーテート、バックコーテート、ダブルコーテートで"をくくってもだめでした

308デフォルトの名無しさん2018/12/05(水) 20:49:13.75ID:jRzepDw/
何をしたくて何をしているのかさっぱりわからん

309デフォルトの名無しさん2018/12/05(水) 20:58:21.39ID:x9ea9mMQ
たとえばですが
$pass = test123"45
net use c:¥temp ¥¥192.168.1.10 $pass /user:testuser

とした時にパスワードに含まれている"が文字列として認識されずコマンドが実行されないのです
これをエスケープしようと
$pass = test123"""45
$pass = test123'"45
などとしてもうまくいかない感じです

310デフォルトの名無しさん2018/12/05(水) 20:59:28.32ID:0urcwekh
net useはpowershellのコマンドプロンプト用、powershellではNew-Psdriveコマンドレット、powershellのエスケープ文字は基本バックスラッシュ`

311デフォルトの名無しさん2018/12/05(水) 21:00:28.08ID:0urcwekh
WSHとごっちゃにしないでね

312デフォルトの名無しさん2018/12/05(水) 21:01:52.08ID:0urcwekh
1行目間違えた
net useはコマンドプロンプト用

313デフォルトの名無しさん2018/12/05(水) 21:03:52.33ID:x9ea9mMQ
net use ではなく new-psdriveだとバクスラでエスケープ可能なんですか?
net useだとエスケープできなかったので、ちょっとやってみまふ

314デフォルトの名無しさん2018/12/05(水) 21:08:28.49ID:x9ea9mMQ
ちなみにパワーシェルからcmd /cでコマンド呼び出すときのエスケープキーはバクスラと^のどちらですか?

315デフォルトの名無しさん2018/12/05(水) 21:10:17.22ID:0urcwekh
本件は
$pass='123"45'
とすればいいだけ

316デフォルトの名無しさん2018/12/05(水) 21:16:36.03ID:x9ea9mMQ
シングルコーテートでくくってもエスケープできるんですね
ありがとうございます

317デフォルトの名無しさん2018/12/05(水) 21:23:21.81ID:0urcwekh
エスケープじゃなくて、Powershellでは文字列は必ず'か"どっちかで囲う。生身はだめ。'で囲うのは静的リテラルの場合

318デフォルトの名無しさん2018/12/05(水) 21:25:50.83ID:jRzepDw/
結局環境変数は関係ないのか?
> " が含まれている文字列を環境変数にいれて

319デフォルトの名無しさん2018/12/05(水) 21:30:22.57ID:0urcwekh
本当の初学者で変数もコマンドプロンプトと同じ概念なんだろ

320デフォルトの名無しさん2018/12/05(水) 21:57:08.28ID:x9ea9mMQ
なるほどそういうルールあるんですね
プログラムやったことないんでしらんかったす
リテラルってのも意味わからんかったくらいや

321デフォルトの名無しさん2018/12/05(水) 22:13:06.29ID:ix5zH8Lr
start-processで終了を待たずにps1実行していくのは疑似並列処理として考えて良いのでしょうか

322デフォルトの名無しさん2018/12/06(木) 07:24:42.90ID:Ia5EZXvv
「`」はバッククォートだ馬鹿者
バックスラッシュ(\)とは違う

323デフォルトの名無しさん2018/12/06(木) 08:11:29.70ID:XlsCLRxJ
PowerShell Coreの宣伝始まった

https://twitter.com/Steve_MSFT/status/1070096140010287104
https://twitter.com/5chan_nel (5ch newer account)

324デフォルトの名無しさん2018/12/06(木) 12:49:27.99ID:r+yxrRWT
標準出力に変なもん混ぜるな

325デフォルトの名無しさん2018/12/06(木) 14:36:39.70ID:8XTishpu
>>309
間違いないよう(見間違いも)にだったらヒアストリングつかったらどうでしょう
行は増えますが、エスケープ考える必要もかいから。

@"
test123"45
"@

326デフォルトの名無しさん2018/12/07(金) 00:30:59.21ID:d/eT01GS
whoamlで取得した実行結果のユーザ名を一行で環境変数に入れるにはどうすれば良いでしょうか

whoami 実行
結果 testpc¥user1
と結果が返ってくる場合、
$test = whoami.split("¥")[1]
と言ったかたちで
$testにuser1を格納させたいのですがうまく行きません

327デフォルトの名無しさん2018/12/07(金) 01:04:59.92ID:frCtIBO+
括弧で囲む
(whoami)

328デフォルトの名無しさん2018/12/07(金) 03:14:11.72ID:0M/LMioQ
>>326
昨日と同じ人だと思うけれどpowershellでは変数はコマンドプロンプトとは違い環境変数ではありません。

http://www.atmarkit.co.jp/ait/spv/0709/20/news125_2.html

329デフォルトの名無しさん2018/12/07(金) 07:51:42.00ID:QVqNOX9I
読んでみたけど違いがよくわからん
型を持つってとこ?

330デフォルトの名無しさん2018/12/07(金) 08:45:51.25ID:hrhTiXxm
型じゃなく範囲・スコープだよ
環境変数はOSが管理していて、ひとつ値をセットしたら同じ環境内の他プロセス(アプリ)がその値をOSに教えてもらえる
普通の変数はプロセス内で管理されていて、他プロセスは見ることが出来ない

331デフォルトの名無しさん2018/12/07(金) 12:18:05.50ID:cSzYN2du
Linux では、~/.bashrc に環境変数を書けば、
自分(そのユーザーだけ)が起動するプロセスから、アクセスできる

etc/ 以下なら、PC 全体の設定になる

~/.bashrc は、Windows ではユーザー環境変数。
一方、システム環境変数は、PC 全体の設定で、すべてのユーザーで共有される

例えば、Tで始まる環境変数なら、
ls env: | Where-Object {$_.name -like "T*"}

332デフォルトの名無しさん2018/12/07(金) 12:42:27.81ID:TQVSWTyy
>>326
それを実行している自分自身のユーザ名が欲しいだけなら、わざわざそんなことしなくても
$env:USERNAME
で引っ張ってこれる。

出し惜しみ、小出しにしないで前後関係も話さないと的確なアドバイスが出来ないよ。

333デフォルトの名無しさん2018/12/07(金) 16:32:33.86ID:fTv51LPz
>>331
.bashrcはPowershellでは$Profileに当たると思うわ

334デフォルトの名無しさん2018/12/07(金) 17:14:53.01ID:2MiN5Gqm
つーか、Credential使えよ
今時ハードコートとかありえん

335デフォルトの名無しさん2018/12/07(金) 17:53:23.13ID:TQVSWTyy
>>334
だね。
どうやら ID:x9ea9mMQ ID:d/eT01GS はネットワークドライブのマウントがやりたいようだけど、
dos batch で使うべき net use や whois を PowerShell で使おうとすることに
無理がある。出来なくもないけどエレガントじゃない。

PowerShell でやるなら New-PSDrive だな。
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/new-psdrive
-Credential で任意の(自分以外の)クレデンシャルも指定できるから、
ID:x9ea9mMQ の要件も(たぶん)満たせるだろう。

336デフォルトの名無しさん2018/12/07(金) 18:35:56.11ID:fTv51LPz
コマンドレット使える所を外部コマンド使うなよとは思うね
出力から値をテキスト抽出で取り出すとかもエレガントではないな

あとlsとかcatとかdirとかのコマンドエイリアス使うのも微妙に感じる

337デフォルトの名無しさん2018/12/07(金) 19:53:53.63ID:iBsL10N5
Get-ChileItemに-Depthなんてオプションあったんだな。
うちの会社は↓みたいな整然としたフォルダ構成だから
こういうオプションあるとすごく助かるわ


プロジェクト管理
 └2018年
  └1Q
   └プロジェクトA
   └プロジェクトB
  └2Q
   └プロジェクトC
  └3Q
   └プロジェクトD
  └4Q
   └プロジェクトE
   └プロジェクトF
 └2019年
  └1Q
   └プロジェクトG

338デフォルトの名無しさん2018/12/07(金) 20:47:47.55ID:d/eT01GS
treeコマンドやん

339デフォルトの名無しさん2018/12/07(金) 20:51:06.57ID:0M/LMioQ
tree形式で図示しただけ。
gciの-Depth は再帰検索する深さの指定

340デフォルトの名無しさん2018/12/07(金) 20:55:01.67ID:0M/LMioQ
ID:iBsL10N5 自身が言うべき事だが
阿呆指摘についカッとなった

341デフォルトの名無しさん2018/12/07(金) 21:00:51.64ID:hrhTiXxm
清濁併せ呑んでこそのPowershell
なんたって名前からしてパワーだからな
力業もどんとこい

342デフォルトの名無しさん2018/12/08(土) 11:14:58.74ID:j0zdr08g
.NET Core 3.0 Preview 1でWPF、Windows Forms, WinUIが組み込まれてオープンソース化したんか
ほえー

343デフォルトの名無しさん2018/12/08(土) 15:04:34.50ID:8f5a0RKW
>>342
Preview出てたんだ
早速使ってみたい

344デフォルトの名無しさん2018/12/08(土) 21:38:13.36ID:3Pj/jJ/S
Announcing Open Source of WPF, Windows Forms, and WinUI at Microsoft Connect(); 2018
https://blogs.windows.com/buildingapps/2018/12/04/announcing-open-source-of-wpf-windows-forms-and-winui-at-microsoft-connect-2018/

345デフォルトの名無しさん2018/12/10(月) 20:42:25.20ID:T1JETwww
PowerShellでLINQって使えますかね?

346デフォルトの名無しさん2018/12/10(月) 21:47:33.54ID:PtRqcV9k
Linqっぽいことはできる
(1..10).ForEach({ $_ + 100 }).Where({ $_ -gt 105 })

Linqメソッドも呼べるけどC#のようにインスタンスメソッドな感じでは使えない

[Linq.Enumerable]::Where(1..10 -as [int[]], { param($x) $x -gt 5 } -as [Func[int,bool]])

347デフォルトの名無しさん2018/12/10(月) 22:38:26.51ID:vOOk2a2h
必要な箇所でC#コード書けばいいじゃん
外人のコード読むと皆そうやってるよ

348デフォルトの名無しさん2018/12/11(火) 18:45:17.51ID:zooyFZ6f
@echo offと同等のコマンドってパワーシェルにありますか?

349デフォルトの名無しさん2018/12/11(火) 19:50:47.03ID:5HU4XML/
>>348
エコー防止したいなら

$null = 式

式 | Out-Null

式 > $null

[void]式

どれでもどうぞ

350デフォルトの名無しさん2018/12/11(火) 20:18:20.80ID:pSYvkLmz
powershellでメール受信やるならMailkitがいいですかね?

351デフォルトの名無しさん2018/12/14(金) 21:21:08.51ID:xmsOh7Vk
UWPスレが死んでるのでこっちで聞き直すね
起動してるUWPアプリの列挙ってpowershellでどうやればいいですかね?
全く出てこないんですが

352デフォルトの名無しさん2018/12/14(金) 23:01:55.52ID:unWqZBXJ
Get-WmiObject Win32_Process | where Path -like "*\WindowsApps\*" | fl Process Id,Name,Path
とか

新着レスの表示
レスを投稿する