目的
PowerShellの変数がどのスコープで定義されているかを確認します。
使用方法
ドットソースでList-Variables関数を実行します。
(関数の前にピリオド(.)と空白を置く)
. List-Variables
出力例
- local, script, globalの各スコープとスコープ番号の対応を表示します。
- 定義済みの変数の一覧を表示し(
AllScopeの属性を持つものは除外)、
変数が定義されているスコープ番号に"S"(privateスコープの場合は"P")を表示します。また、local, script, globalの各スコープでの値(文字型に変換)を表示します。 - ウィンドウ幅のバッファサイズを170文字に設定します。
ソース
Function global:List-Variables () {
$orgErrorActionPreference = $ErrorActionPreference
$ErrorActionPreference = "Stop"
$global:FooBarBaz = 1
$foo_g = -1
$foo_j = 0
do {
try {
if ((Get-Variable FooBarBaz -Scope $foo_j)) { $foo_g = $foo_j }
} catch {}
$foo_j++
} while ($foo_g -lt 0)
$foo_c = Get-PSCallStack
$foo_s = $foo_g
$foo_j = 0
for ($foo_i = 1; $foo_i -lt $foo_c.Length; $foo_i++) {
if ($foo_c[$foo_i].GetScriptLocation() -NotMatch "\.ps1") { continue }
if ($foo_c[$foo_i].InvocationInfo.MyCommand.CommandType -eq "") { continue }
if ($foo_c[$foo_i].InvocationInfo.MyCommand.CommandType -eq "ExternalScript") { $foo_s = $foo_j; break }
$foo_j++
}
Write-Output "Local: 0, Script: $foo_s, Global: $foo_g"
Remove-Variable foo_* -Exclude foo_g -Scope local
Remove-Variable FooBarBaz -Scope global
$host.UI.RawUI.BufferSize = New-Object System.Management.Automation.Host.Size(170, $host.UI.RawUI.BufferSize.Height)
Get-Variable -Exclude foo_g,orgErrorActionPreference | % {
# if ($_.Options -Match "AllScope") { return }
$foo_o =[PSCustomObject]@{ Name = $_.Name }
try {
$foo_t = (Get-Variable $_.Name -Scope local -ValueOnly).ToString() -Replace "(?s)^(.{37}).{4,}",'$1...'
} catch {
$foo_t = ""
}
$foo_o | Add-Member lo $foo_t
try {
$foo_t = (Get-Variable $_.Name -Scope script -ValueOnly).ToString() -Replace "(?s)^(.{37}).{4,}",'$1...'
} catch {
$foo_t = ""
}
$foo_o | Add-Member sc $foo_t
try {
$foo_t = (Get-Variable $_.Name -Scope global -ValueOnly).ToString() -Replace "(?s)^(.{37}).{4,}",'$1...'
} catch {
$foo_t = ""
}
$foo_o | Add-Member gl $foo_t
for ($foo_i=0; $foo_i -le $foo_g; $foo_i++) {
$foo_s = "s" + $foo_i.ToString()
try {
if ((Get-Variable $_.Name -Scope $foo_i).Options -NotMatch "Private") {
$foo_o | Add-Member $foo_s "S"
} else {
$foo_o | Add-Member $foo_s "P"
}
} catch {
$foo_o | Add-Member $foo_s "-"
}
}
$foo_o
} | format-table @{Expression={$_.Name};Label="Name"},`
@{Expression={$_.s0};Label="0"},`
@{Expression={$_.s1};Label="1"},`
@{Expression={$_.s2};Label="2"},`
@{Expression={$_.s3};Label="3"},`
@{Expression={$_.s4};Label="4"},`
@{Expression={$_.s5};Label="5"},`
@{Expression={$_.s6};Label="6"},`
@{Expression={$_.s7};Label="7"},`
@{Expression={$_.s8};Label="8"},`
@{Expression={$_.s9};Label="9"},`
@{Expression={$_.lo};Label=" local";Width=40},`
@{Expression={$_.sc};Label="script";Width=40},`
@{Expression={$_.gl};Label="global";Width=40}
$ErrorActionPreference = $orgErrorActionPreference
Remove-Variable foo_* -Scope local
Remove-Variable orgErrorActionPreference -Scope local
}
クリエイティブ・コモンズ 表示 - 継承 4.0 国際