ドラクエ10ブログの予定 -4ページ目

ドラクエ10ブログの予定

ドラクエ10ブログの予定

■呼び出し元に返す値についてまとめみた

#オブジェクト出力するものは返すと理解

#set-aclコマンドレットの実行結果などもそのまま返す

 

# called.ps1

try{
    Write-Host "write-host"  #呼び出し元に返さない
    Write-Output "write-out" #呼び出し元に返す
    throw "dammy error" # catchに飛ぶ
    return 1 # 上のthrow文がなければ呼び出し元に返してこのスクリプトの処理はここで終わり
    Write-Output "after return" #実行されない
}catch [exception] {
    Write-Output "error catch" #呼び出し元に返す
    $error[0] #呼び出し元に返す
}

 

# call.ps1

PS C:\WINDOWS\system32> C:\Users\custmor\Desktop\test\call.ps1
$ret = Invoke-Command -ComputerName $env:COMPUTERNAME -ScriptBlock { C:\Users\custmor\Desktop\test\called.ps1 }
write-host "---"
$ret.Length
$ret[$ret.Length -1]
$ret[0]
$ret[1]
$ret[2]


PS C:\WINDOWS\system32> $ret[0]
write-out


PS C:\WINDOWS\system32> $ret[1]
error catch

 

PS C:\WINDOWS\system32> $ret[2]
dammy error
発生場所 C:\Users\custmor\Desktop\test\called.ps1:4 文字:5
+     throw "dammy error"
+     ~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (dammy error:String) [], RuntimeException
    + FullyQualifiedErrorId : dammy error

# あるキーの下にあるキーを取得

PS HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall> $PATH = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
Get-ChildItem -Path $PATH | % {$_.Name}
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\AddressBook
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Connection Manager
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\DirectDrawEx
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\DXM_Runtime
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Fontcore
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\HomeBusinessPipcRetail - ja-jp
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\IE40
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\IE4Data
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\IE5BAKEX
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\IEData
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\InstallShield_{80E158EA-7181-40FE-A701-301CE6BE64AB}
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\KB3182545
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft SQL Server 13

 

# あるキーエントリーの値を取得

PS HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{04DBB430-6197-4C03-AEB8-86DD53C72297}> $PATH = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{04DBB430-6197-4C03-AEB8-86DD53C72297}"
(Get-ItemProperty $PATH).displayname
Microsoft SQL Server 2016 T-SQL Language Service

    :

 

# ループしながら条件(ディスプレイネームにSQLが含まれる)に当てはまるキーを一括削除

PS HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall> $PATH = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
$a = Get-ChildItem -Path $PATH | ForEach-Object {$_.Name}
foreach($b in $a){
    $c = Split-Path $b -Leaf # パスから末端のキー名を取得
    # HKEY_LOCAL_MACHINEから始まるパス名をHKLMから始まるパス名にしてキーエントリーの値を検索
    if ((Get-ItemProperty "${PATH}\${c}").displayname -match ".*SQL.*"){
        Remove-Item "${PATH}\${c}" -WhatIf
    }
}
WhatIf: 対象 "項目: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\KB3182545" に対して操作 "キーの削除" を実行しています。
WhatIf: 対象 "項目: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft SQL Server 13" に対して操作 "キーの削除" を実行しています。
WhatIf: 対象 "項目: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft SQL Server SQLServer2016" に対して操作 "キーの削除" を実行しています。
WhatIf: 対象 "項目: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{04DBB430-6197-4C03-AEB8-86DD53C72297}" に対して操作 "キーの削除" を実行しています。
WhatIf: 対象 "項目: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{0C795124-D561-46FC-B4ED-B4F052A8D9E6}" に対して操作 "キーの削除" を実行しています。
WhatIf: 対象 "項目: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{0D9BD39A-A870-4FDF-B590-1E9787CF16D9}" に対して操作 "キーの削除" を実行しています。
WhatIf: 対象 "項目: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{1FEF277F-5A9E-43B6-A7F9-2FF9C351380C}" に対して操作 "キーの削除" を実行しています。
WhatIf: 対象 "項目: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{2FFF0757-4360-42F5-8814-16BB5CF0145F}" に対して操作 "キーの削除" を実行しています。
WhatIf: 対象 "項目: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{411C81A0-2680-4889-A610-88EFBE8E00E3}" に対して操作 "キーの削除" を実行しています。


    :

 

参考:

https://msdn.microsoft.com/ja-jp/powershell/scripting/getting-started/cookbooks/working-with-registry-keys  

 

http://www.atmarkit.co.jp/fwin2k/win2ktips/1030psreg/psreg.html

クラスター構成かシングル構成かを判断するロジックを作成している時に気になったので検証してみた

 

●OR演算子について
# 最初の式が「真」を返せば、次の式を評価せずブロックに入る。

 

# 下記例は、最初の式が「偽」になり、次の式を評価に移ったところ
# インストールされていないコマンドを実行しようとしてエラーとなっている。
if(($env:COMPUTERNAME -eq "AAA") -or (Get-ClusterGroup)){
    #任意のコマンド
}

Get-ClusterGroup : 用語 'Get-ClusterGroup' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。
発生場所 行:3 文字:5
+     Get-ClusterGroup
+     ~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Get-ClusterGroup:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
    

# 下記例は、最初の式が「真」になり、次の式を評価せずインストールされていないコマンドを実行しないためエラーが回避される
if(($env:COMPUTERNAME -eq "DESKTOP-XXXXXXX") -or (Get-ClusterGroup)){
    #任意のコマンド
}