powershell

powershell 小技

“このシステムではスクリプトの実行が無効になっているため・・” セキュリティーエラー発生

いつも忘れたころにあたるこのエラー。実行ポリシーの問題でエラーになってしまう事だけは覚えているのだけど毎回ネットを検索してしまう。今回はここに書き留めます。

-- 実行ポリシーがダメなんだよね、、
PS C:\plsql> Get-ExecutionPolicy
Restricted
PS C:\plsql>

環境変数の操作

長くなったので以下分割しました。

Powershellターミナルで環境変数操作
システム環境変数へ設定する場合(Powershellは管理者で起動が必要)::SetEnvironmentVariable("JAVA_HOME", "C:\Program Files\Java\jdk-17", ::Machine)ユーザ…

一時的に開放(他人のPCで触るときなどはこちら)

実行オプション -ExecutionPolicy RemoteSigned を指定して実行 

PowerShell -ExecutionPolicy RemoteSigned  .\my_export.ps1 orau8 PACKAGE

恒久的に開放(自分のPC用) ※PowerShellを管理者として実行する必要あり

Set-ExecutionPolicy RemoteSigned とたたいて実行ポリシーを恒久的に変更。その後には普通に実行できます。

Set-ExecutionPolicy RemoteSigned
PS C:\plsql> Set-ExecutionPolicy RemoteSigned

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (https://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): y
PS C:\plsql> .\mnt_le_export.ps1 orau8 PACKAGE

やっぱりデフォルトの「Restricted」に戻したくなった場合

Set-ExecutionPolicy Restricted でもとに戻ります

Set-ExecutionPolicy Restricted
PS C:\plsql> Set-ExecutionPolicy Restricted

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (https://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): y
PS C:\plsql>

フォルダ内ファイルの一括リネーム

以下に移動しました。

Powershell フォルダ内ファイルの一括リネーム
フォルダ内ファイルの一括リネームwindows環境でファイル名の一括リネームをたまにやりたくなるのですが、覚えることできず毎回調べることになります。Linux環境ならrenameコマンド覚えられるのだけれど、、、Get-ChildItem …

フォルダ内のファイル全てを対象に文字列置き換え

以下に移動しました。

Powershell 文字列置き換え
フォルダ内のファイル全てを対象に文字列置き換え例えば、スキーマ修飾したDDLが記載されている複数のファイルを一括で、異なるスキーマに変更したい場合などで活躍します。(ファイルの文字コード、改行コードを何にするか適宜書き換えて使ってください)…

Powershellでwhichコマンドを実現したい

Linuxのwhichコマンドついたたきたくなるんです。コマンドレットとしてGet-Commandなのですがどうも馴染めないんです。dosコマンドではwhere.exeです。個人的には「.exe」を省略したいですが、仕方なくこれで代用しています、、

## Linuxでは
[oracle@vm013 ~]$ which sqlplus
~/app/product/12.1.0/dbhome_1/bin/sqlplus
[oracle@vm013 ~]$

## PowerShellでは
PS C:\> where.exe sqlplus
C:\tools\oracle_client\instantclient_19_11\sqlplus.exe
PS C:\>

PS C:\temp\sample01> get-command sqlplus

CommandType     Name                                     Version    Source
-----------     ----                                     -------    ------
Application     sqlplus.exe                              12.2.0.0   C:\tools\oracle_client\instantclient_19_11\sqlplus.exe

PowershellでZIPとUNZIP

以下に移動しました

Powershell zip形式で圧縮 Compress-Archive
powershellにはzipコマンドが標準装備されていないので代わりにompress-Archiveを使います。以下はカレントフォルダに存在するlambda_function.pyというファイルをカレントフォルダにnew_code2.zi…
Powershell zipファイルをunzip(解凍)する Expand-Archive
powershellにはunzipコマンドが標準装備されていないので代わりにExpand-Archiveを使います。以下はカレントフォルダに存在するnew_code2.zipというファイルをカレントフォルダへ解凍して展開しています。Expa…

Powershellでgrepコマンドを実現したい

以下に移動しました。

powershellでgrepを使いたい
powershellでgrepを使いたい

Powershellでファイルの行数を簡単に調べたい(wcの代わりに)

get-content "ファイルのパス" | Measure-Object -Line -Word -Character
行数だけでよいなら
(Get-Content "ファイルのパス" | Measure-Object -Line).Lines

Powershellでcatコマンドを実現したい

ls がGet-ChildItemのエイリアスで定義されているように、catはGet-Contentコマンドレットのエイリアスとして定義されているようです。

Get-Content .\sql01.sql
## 実行例
PS C:\temp\sqlfiles> get-content .\sql01.sql
SET VERIFY OFF
set lin 200
select '&1' as lno,to_char(sysdate,'YYYY/MM/DD HH24:MI:SS') as "SYSDATE" from dual;
PS C:\temp\sqlfiles>
PS C:\temp\sqlfiles> cat .\sql01.sql
SET VERIFY OFF
set lin 200
select '&1' as lno,to_char(sysdate,'YYYY/MM/DD HH24:MI:SS') as "SYSDATE" from dual;
PS C:\temp\sqlfiles>

Powershellでteeコマンドを実現したい

Linuxには、標準出力に出力した内容を出力しつつも、同時に同じ内容をファイル出力をしたような時に活躍する便利なteeコマンドがありますが、PowerShellでもないか探したところありました。
(補足)以下例題でWrite-Outputを使っていますが、Write-Hostはパイプへ渡す事ができないのでおのずとTee-objectでは利用できない事になります。

-- Encodingオプションを v7.2以降からサポートされはじめました
-- 以前v7.1.5の環境をもっていたのですがその時は使えていなかった事覚えています。
-- 
ls | Tee-Object -FilePath ./logs/lsout.log -Append -Encoding utf8
Write-Output "こんにちは"  | Tee-object -FilePath ./logs/lsout.log -Append -Encoding utf8
PS D:\work\temp> ls | Tee-Object -FilePath ./logs/lsout.log -Append -Encoding utf8

    Directory: D:\work\temp

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          2022/12/04     2:47                logs
-a---          2022/12/04     0:45            571 sample01.ps1

PS D:\work\temp> Write-Output "こんにちは"  | Tee-object -FilePath ./logs/lsout.log -Append -Encoding utf8
こんにちは
PS D:\work\temp> cat logs/lsout.log

    Directory: D:\work\temp

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          2022/12/04     2:47                logs
-a---          2022/12/04     0:45            571 sample01.ps1

こんにちは
PS D:\work\temp>

Powershell ISEを起動する (ショートカット)

ファイル名を指定して実行

powershell_ise

フォルダ内ファイル一覧をクリップボードへ

(Get-ChildItem -File).FullName | Set-Clipboard

フォルダ内ファイル一覧をクリップボードへ(ファイル名のみ)

(Get-ChildItem -File).Name | Set-Clipboard

環境変数を一時的に設定する

$env: + 変数名 = “設定値” で設定可能です。

$env:TNS_ADMIN = "D:\instantclient"

tail -f を実現したい

以下に移動しました。

PowerShellでtail -fを実現する
Get-Contentコマンドレットでtail -fを実現する個人的にはlog4jで出力するログファイルを出力する時などに使っています。linuxでのtail -fと異なり、標準出力されているところにライン「ーーー」などを引いてログが流れて…
スポンサーリンク
タイトルとURLをコピーしました