Windows PowerShell Part5 [無断転載禁止]©2ch.net
レス数が900を超えています。1000を超えると表示できなくなるよ。
>>889
どうもありがとうございます
一般メニューのほうから起動することにしました 手っ取り早いのはwinキー, p, w, s, Enter
必要に応じて矢印キーでrun as administratorを選ぶ
Windows11なら「設定」で標準のコンソールを変えることができる
Windows10なら %LOCALAPPDATA%\Microsoft\Windows\WinX の中身を手で書き換える
desktop.ini も隠れてるので書き換え忘れずに
ミスってメニュー壊しても知らんので自己責任で わざわざWin+Xを書き換えなくてもwinキー, p, w, s, Enterが早いしどんなコマンドにも応用が効くのでおすすめ 応用が効くと書いたので蛇足しとく
Win+R でコマンドをフルに打たなくても最近はスタートメニューにフォーカスがあるときコマンドのインクリメンタルサーチができる
古いほうは powershell.exe、新しいほうは pwsh.exe という実行ファイル名なので pws まで打ち込むと候補が絞れる 15年前以上前からできるのに「最近」とは一体... PowerShell でxmlファイルをtxtファイルに
返還することはできますか?
自動化したいんです。 >>898
手動化できているのなら、変換元と変換結果をどこかにあげて例示しよう では読み込んで、クリップボードにコピー
する事はできますか? はい、できます。$cp::SetText(変数)
最初にSystem.Windows.Formsを読み込んでね scoop入れてみたけどすごくいいな。使ってる人いない?
てかロクにpowershellのコマンドを知らないものだから irm get.scoop.sh | iex でなんでインストールできるのが不思議だった
賢いなこれw Get-Contentみたいにテキストファイルを一行毎に配列にしてくれるのを
ファイルじゃなくて標準入力からテキストデータを受け取って配列にする方法はありますか? セットしたい配列変数が $ary の場合
ヒア文字列で
@"
aaa
bbb
ccc
"@ -split "`n" | tee -Variable ary
とすれば $ary に配列がセットされるけど
画面表示がいらないなら | 以降を
| % {$ary=@()}{$ary+=$_}
としてください
ヒア文字列ではなくてクリップボードの内容を受け取りたい場合は
(Get-Clipboard) | % {$ary=@()}{$ary+=$_.ToString().Trim()}
の様にすれば行毎の文字列の先頭・末尾の空白を消して配列に取り込むことが出来るでしょう >>898
txtファイルに変換の意味が改行マークの挿入+字下げで良いのなら
xmlファイルの文字コードがUTF8であれば
$f = "$Env:LOCALAPPDATA\Programs\app_foo\config.xml"
$x = New-Object xml; $x.Load($f); $x.Save($f); Remove-Variable x,f
$f のところは xml ファイルのフルパスを入れて下さい
運用する場合
アプリのフルパスが "$Env:LOCALAPPDATA\Programs\app_foo\bar.exe"
テキストエディタが "C:\Program Files\Notepad++\notepad++.exe" であるなら
C:\tools\edit_xml.ps1 の内容
Set-Alias bar "$Env:LOCALAPPDATA\Programs\app_foo\bar.exe"
Set-Alias editor "C:\Program Files\Notepad++\notepad++.exe"
$f = "$Env:LOCALAPPDATA\Programs\app_foo\config.xml"
ps bar -ea SilentlyContinue | % {$_.CloseMainWindow();$_.WaitForExit()}
$x = New-Object xml; $x.Load($f); $x.Save($f); Remove-Variable x
write "編集が終わったらリターンを押してください"
editor $f
pause
Remove-Variable f
start bar
実行する際は & C:\tools\edit_xml.ps1 で
[x] 押したらトレイに遷移するアプリは手動で終了させる or kill に書き換える必要があるでしょう >>905
ありがとうございます。
あんたは神ですか?! n番目の履歴の実行をInvoke-Historyではなくbashみたいに「!n」ってやる方法ありませんか? なお、腐れChatGPTの回答はなしでお願いします
聞いたら↓でできるとかデタラメ回答よこしてきたし
function global:history-command { Invoke-History $args[0] }; Set-Alias -Name ! -Value history-command -Option AllScope PowerShellでは!ではなくrを使う
あとrと番号の間に空白文字をれる
r 3
みたいな感じ
>>910の場合は!の前に&を付ける必要がある
PowerShellの!は論理否定演算子だからな
&! 3 文句ばっかし言っていないで、さっさと変数の中身くらいはデバッグで間違いに気付くようになれ >>911
ありがとうございます
遅レスですいません カレントフォルダにあるファイルをタブ補完したら頭に.\がつくのがうざい
つかないようにできん? ここのコード試したらできたわ
ttps://superuser.com/questions/1741125/prevent-powershell-autocomplete-from-adding-dot-prefix
中身はさっぱりわからんけどw powershellではカレントディレクトリにある.exeや.ps1を実行するときには先頭に .¥ を付ける必要がある
だから補完時に .¥ を付けることだけを抑制するのはちぐはぐな対応で普通はデメリットが大きい
.¥ が必要になったのはセキュリティを考慮した仕様で、ネット等から入手したzip等の中にnotepad.exe等の既知のアプリと同名のマルウェアを仕込んで騙して実行させるようなトラップの類のリスクを低減するもの >>917
.\notepad.exeを起動させるんですね
それって安全なの? notepad.exeでカレントディレクトにあるやつが実行されるよりは
ファイル名だけで.¥まで補完すなってのはある
bashなんかは./からタイプしないと補完しないよな >>920
自ら補完して気づかず起動したらそれまで
この仕様変更によって守られるケースもあるし守れないケースもある
何事にも完璧はないし100じゃないから0じゃないか意味ないと腐すのは愚か者の考え方
セキュリティと利便性はいつだってトレードオフ >>922
>セキュリティと利便性はいつだってトレードオフ
馬鹿言ってんじゃない。cmdとの互換性なんて要らないのにいまだにカレントディレクトリが探索パスの先頭にあるのが頭おかしいだけ ん、ちょっと変な書き方になった
要はコマンドライン先頭のコマンド名の箇所の補完でカレントディレクトリのファイルが一番最初にしかも丁寧に.\付きで出てくる仕様自体が
.\を付けないと実行できないようにされてる意味すら無くしてるわけで、毎回ユーザーに目視確認させるんじゃないよって話だ oh my poshって今知ったけどかなりイケてるなこれ
powershell専用と思いきや色んなOS、シェルに対応してる
Windows Terminalでpowershell7とwsl2を両方使う人はこれ使うとプロンプトラインに統一感出ていい感じよ
逆に統一感ありすぎてどっちがどっちか区別つかないかもしれんけど function hoge { echo "fuga" }
Set-PSReadLineKeyHandler -Chord Ctrl+u -Function hoge
としたらエラーになった
キーバインドでユーザ定義関数は指定できないの? 何年目かでいうなら今年3年
アイスタイルふざけんなよ上げろや死ね ~がhomeに展開されなくて困る
早いとこ対応してくれ サブディレクトリの下のファイル数をカウントして回るスクリプト
dir -attr D | %{ (dir $_.FullName -attr !D).Count }
おおむね動くんだけどディレクトリ名にスペースがあると0になってしまう
(dir $_).FullName的な挙動になってる気がするんだけどどう書けばいいの? >>932
こういうのもあるけど
(Get-ChildItem [Path] -Recurse | Measure-Object).Count Get-ChildItem <target> -Directory | % {"{0}: {1}" -f $_.Name,$_.GetFiles().Count} でどうでしょうか こう変えるだけでいいよ
dir -attr D | %{ (dir "$($_.FullName)" -attr !D).Count } dir -attr D | %{ (dir -LiteralPath $_.FullName -attr !D).Count }
dir -attr D | %{ ($_ | dir -attr !D).Count } パイプを使って渡しているだけだからそのような結果となってしまう
横着して一行で済ませようとしなけりゃいいんだよw PowerShellでもIF構文とかも利用出来るんだからねw ファイルフルパス中に含まれるスペースなどはコマンド区切り文字として扱われてしまうので実行時にエラーとなってしまう
for %%1 in ("%MediaPath%") do (set MediaPath=%%~s1)
短いファイル名へと一旦変更するなど工夫をして利用する レス数が900を超えています。1000を超えると表示できなくなるよ。