投稿

ラベル(powershell)が付いた投稿を表示しています

サロゲートペア文字とpowershell(1)

サロゲートペア文字が面倒くさい。 𠮷 土の吉、吉野家の吉の扱いが面倒だ、この文字、サロゲートペア文字と呼ばれ文字コードで表すと「D842 DFB7」になる、通常の川とかが「 5DDD」と4桁の16進数なのに対して、8桁となる。 powershellでは         $myname="𠮷川"               $tt= [int[]][char[]]$myname | %{ $_.ToString("X2")}            Write-Host "この文字列のコードは" $myname $tt とすると  D842 DFB7 5DDD と返してくれる D842 DFB7が𠮷で 5DDDが川だ。 で、           $myname_countA = [ System.Globalization.StringInfo ]::new( $myname ).LengthInTextElements         $myname_count = $myname .Length とすると $myname_countA が 3 で$myname_count が 2文字になるので、一致s無ければサロゲートペア文字が含まれていると推測できる。 さらに、powershell内部でサロゲートペア文字をコードから入力するためには             $TTT = -join [ char []]( 0xd842 , 0xdfb7 )           Write-Host $TTT で表示できる。これ調べるだけで半日以上かかった。

PowershellのCopy-Itemがsharepointの同期しているフォルダーの中身をコピーできない

一難去ってまた一難。困ったもんだ。 New-Itemだけ特別なん? コマンドプロンプトでcopyコマンドだとコピーできるけど、powershellではコピーできない。 さらに、関数の引数がうまくとれない現象が。 F_Copy-Item-link $mycopyfrom,$mycopyto  ってして関数を以下にすると  function   F_Copy-Item-link {     $args[0] コピー元     $args[1] コピー先          $args[0]     $fromfolder = $args [ 0 , 0 ]     $tofolder = $args [ 0 , 1 ] } $args[0] に$mycopyfrom,$mycopyto が2つとも格納されて、$args[1]に値がはいらない。なんで。 関数に引数わたすときはカンマダメなんだ。 取りあえず動けないよいので F_Copy - Item - link $mycopyfrom $mycopyto function   F_Copy-Item-link ( $fromfolder , $tofolder ){     # https://pro.pureatio.com/powershell/contents/file_copy.html     try {         $tmp_child_files = [ System.IO.Directory ]::GetFiles( $fromfolder , "*" )         foreach ( $tmp_child_file in $tmp_child_files ){   #            Write-Output $tmp_child_file             #ファイル名だけ取得             $myFilename = Split-Path   $tmp_child_file - Leaf #            Write-Output $myFilename             $toFileFullpath = Join-Path $tofolder $myFilename             [

PowershellのTest-pathがsharepointの同期しているフォルダーの中身の判定できない

 PowershellのTest-pathがsharepointの同期しているフォルダーの中身の判定できないようだ、どうしたモノか。 test-path "同期しているフォルダーのフォルダー" がFalseになる。onedriveの方はそうでもないが。 同期して一応実態があることになっていてもダメだ、なぜだー 半角スペースがあるとダメなのか? test-path "E:\hogehoge\hugihugi\OneDrive\ドキュメント\123 456" はTrueなのに Powershellで cdコマンドでテナントのとこまではいけるが、その先がいけない、例えば E:\myuserdate\[テナント名] だとするとここまではe:\からCDでつたっていけるのだが E:\myuserdate\[テナント名]\[sharepointoで同期しているフォルダー]に行こうとすると cd : パス '[sharepointoで同期しているフォルダー]' が存在しないため検出できません。 とでる。 この記述でフォルダーとか作れるのに、なぜ、ファイルの存在だけ確認できない。 謎仕様 shrapointの同期が、シンボリックリンクか、ハードリンクか、なのはわかったが。どうしたモノか  [System.IO.Directory]::GetDirectories("path") でなんとかごまかすか。 取りあえずの応急処置として function   F_test-path-link {     try {         $tmp_child_folder = [ System.IO.Directory ]::GetDirectories( $args [ 0 ])         return $true     } catch {         #エラー発生時の処理 フォルダーがないものとしてfalse         return $false       } } という関数を作ってみた。

VBScriptが非推奨になったので

 もうだいぶ前になるが(23.10.10)、VBScriptが非推奨になった。 https://forest.watch.impress.co.jp/docs/news/1537619.html どうしたモノかと思っていた。すぐになくなるわけではないが、結構なvbsで作ったスクリプトがあるなーと思っている。WSHとVBSの組み合わせ、windowsを使ううえでは、結構便利だったんですよね。ちょちょっと書くには。 さて、移行先ですが、windowsに追加インストール無しで使えるということで python、PHPなんかは無しか。(python、PHPは用途に応じて使うが、人に渡すスクリプトとしては使いにくい、モジュールのインストールとか考えるとさらに面倒ごとが増える) で結局面白みがないがpowershellにすることに。 実はpowershellちょっと毛嫌いしていた。コマンドがちょっと冗長だなーと思っていましたが。 vs codeとの組み合わせは結構使いやすい。 まだまだ、使いこなせていないけど勉強しますか。 ところでVBSだけが非推奨で、WSHとかJava Scriptはつかえるんかな。 → https://xtech.nikkei.com/atcl/nxt/column/18/00682/103100137/ PowerShellのほうが高機能なのに加え、セキュリティー面も強化されているからだ。WSH自体が消えゆく運命にある。 ですよね~~~~~

powershell のwget 遅い

 WSL2のubuntu上でwget して 7zipで展開するというスクリプトを使っていたが、なんとなくWSLの起動面倒くさいし、7zipの展開が遅い気がしたので他でできないかと検証。 Powershell にInvoke-WebRequestのエイリアスでwgetになっているので Invoke-WebRequest -Uri 対象URI -OutFile 保存するローカルパス と同じように wget -Uri 対象URI -OutFile 保存するローカルパス でつかえる。 で 使ってみると30Mbps位しかでない・・・・・・。遅い。なんじゃこれ WSLのubuntuのwgetサーバー側で100Mbps規制があるのだがしっかり100Mbpsでている。 powershellは無しか。

マウスのホイールのスクロール量

イメージ
4Kのディスプレイを使って,縦長のページをブラウジングしているとホイールの一度にスクロールする量が1行ではかなり遅く感じる.が,これを大きくしているとgoogle mapとかでホイールを回すと一気に拡大縮小されてウグッってなるのでトルグで変更できるプログラムをpowershellで書いてみた. トースト表示で音が出るのと,うまく設定が反映されないことがある.Firefoxで設定がうまくいかない.とうまだまだ問題あるが.とりあえず.設定ロジクールのMX MASTERの袖部分のスイッチに関連付け.  powershellの.ps1ファイルを直接紐付けできないのでバッチファイルで紐付け プログラムは以下 ------------------------------ #Requires -Version 3.0 #マウスのスクロール量をトルグで変更するプログラム # レジストリ読み取り function RegGet( $RegPath, $RegKey ){     # レジストリそのものの有無確認     if( -not (Test-Path $RegPath )){         Echo "[INFO] $RegPath not found."         return $null     }     # Key有無確認     $Result = Get-ItemProperty $RegPath -name $RegKey -ErrorAction SilentlyContinue     # キーがあった時     if( $Result -ne $null ){         return $Result.$RegKey     }     # キーが無かった時     else{         return $null     } } $RegPath = "HKCU:\Control Panel\Desktop" $RegKey =  "WheelScrollLines" $t=RegGet $RegPath $RegKey #Write-Output $PSScriptRoot $t= [int]

powershellがいらだたしい [ ]があるとうまくいかない

powershellがいらだたしい. vbsももう先は見えないのでpowershellでと思って最近スクリプト作っているが,どうも共同の怪しさが気になる. Webスクレイピングのスクリプトを書いたら遅くて使い物にならなかった.→pythonで書き直したら瞬時でできた. タイムスタンプを変更するスクリプトを書いたら,タイムスタンプを取得できるファイルとできないファイルがある?.場所によって?ファイルの種類によって?フォルダの深さによって? 理解度が低いからなのだろうが,振る舞いが素直でないので困る. ちなみに,現在フォルダーの作成日時と更新日時を取得,設定しようとしているのだが, 引数でフォルダー名,ファイル名を与えるプログラムで #更新時間を取得 $LWTime = (Get-ItemProperty $Args[0]).LastWriteTime  #更新日時の変更 Set-ItemProperty $Args[0] -Name LastWriteTime -Value $myNewtime でフォルダー名に [ ] があると取得できないようだ例えば D:\[test]テスト は× D:\テスト は○ 何じゃそりゃ 正規表現で [ ] を使うから使えないのか.ファイル名で使えないようにしてくださいよ~~~.なんか回避策ありそうだけど. これか, https://nasunoblog.blogspot.com/2016/07/powershell-bracket-literalpath.html やっぱり結構な人が困ってるんですね.