powershell

powershell 小技

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

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

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

一時的に開放(他人の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で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で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>

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 を実現したい

以下に移動しました。

スポンサーリンク