PowerShellのいろいろなもの【忘備録】

```PowerShell:テスト




```

##スタートレイアウトのエクスポート方法

```powershell:スタートレイアウトをエクスポート

Export-StartLayout -Path C:\temp\StartLayout.xml
```

```powershell:スタートレイアウトのインポート方法

Import-StartLayout -LayoutPath C:\temp\StartLayout.xml -MountPath C:\
```
##誤ってスクリプト起動させても止めることができる方法

スクリプトにセーフティーフラグを生成させ、フラグを外さない限り起動しないPSスクリプト。
ファイルの生成、実行、実行後安全装置を解除する。




```PowerShell:SeaftyFlag.ps1
<#
┌──────────────────────────┐

        誤動作防止用安全装置ファイルの確認

└──────────────────────────┘
#>
function global:CHKFlg{
    $TruePath  = ".\TRUE"
    $FalsePath = ".\FALSE"

    switch(Test-Path $TruePath){
        TRUE{
            #実行
            Write-Host "TRUEフラグファイルを確認。実行します。"
        }
        FALSE{
            #FALSEファイルの存在確認
            switch(Test-Path $FalsePath){
                TRUE{
                    exit
                }
                FALSE{
                    #セーフティファイル生成して終了
                    New-Item $FalsePath
                    exit
                }
            }

        }
    }
}
function global:ChengeFlg{
    $TruePath  = ".\TRUE"
    $FalsePath = ".\FALSE"

    switch(Test-Path $TruePath){
        TRUE{
            Rename-Item $TruePath -NewName $FalsePath
        }
        FALSE{
            
        }
    }
}



```

###アイテム生成スクリプト

```Powershell:CreateItem.ps1
<#
┌──────────────────────────┐

        フォルダ/ファイルの存在確認・生成処理関数

└──────────────────────────┘
#>
function global:CHK_Item($TgItemPath,$TgItemFile){
#TgItemPath = フォルダパス
#TgItemFile = ファイル名

#フォルダ/ファイルが引き渡されているか確認する。
#無ければERRを返し、LOGファイルを生成
    #フルパスの合成
    $TgItemFullPath = $TgItemPath +"\"+ $TgItemFile #ターゲットパスの合成(ディレクトリ+ファイル名)
    $DirFlg  = $false #ディレクトリフラグ　TURE = 作成の要有、FALSE = 作成の要無
    $FileFlg = $false #ファイルフラグ　　　TURE = 作成の要有、FALSE = 作成の要無
    $RemFlg  = $false #削除フラグ　　　　　TURE = 削除の要有、FALSE = 削除の要無

# --- フォルダ/ファイル存在有無確認、及びフォルダ/ファイル生成 Start --- #
    #--- フォルダ/ファイル存在有無確認処理 Start ---#
    #フォルダの存在確認
    switch(Test-Path $TgItemPath){
        #フォルダが存在する場合
        TRUE{
            #ファイルの存在確認
            switch(Test-Path $TgItemFullPath){
                TRUE{
                    #ファイルがある場合(ファイルの削除、生成) 
                    $RemFlg  = $true
                    $FileFlg = $true
                }
                FALSE{
                    #ファイルがない場合(ファイルの生成)
                    $FileFlg = $true
                }
            }
        }
        #フォルダが存在しない場合
        FALSE{
            $DirFlg  = $true
            $FileFlg = $true
        }
        #それ以外の処理
        default{
            Write-Host "ERR"
            CreateItem FALSE ".\ERR.log"
            "$DirFlgにて、TRUE/FALSE以外のものが入っていた為" >> ".\ERR.log"
            exit
        }
    }
    #--- フォルダ/ファイル存在有無確認処理 End ---#
    #--- フォルダ/ファイル生成処理 Start ---#
    if($DirFlg -eq $true){
        New-Item $TgItemPath -ItemType Directory
    }
    if($RemFlg -eq $true){
        Remove-Item $TgItemFullPath
    }
    if($FileFlg -eq $true){
        New-Item $TgItemFullPath
    }
    #--- フォルダ/ファイル生成処理 End ---#
# --- フォルダ/ファイルの存在確認、及びフォルダ/ファイル生成 End --- #
}
<#
■概要
フォルダ or ファイルの確認関数
ターゲットパス直下のファイル、またはフォルダがないか確認し、
確認結果を自動でフォルダ/ファイル生成関数に引き渡してくれる。
※直下のものしか確認してない為、途中からないものについては
　一切処理しない。
■引数解説
①引数:TgItemPath　対象フォルダ名(パスも含む)
②引数:ITgItemFile　ファイル名

■使い方
最初にCreateItem.ps1を呼ぶ
CHK_Item <対象フォルダ名> <対象ファイル名>を入れる

<Sample>
.\Createitem.ps1

CHK_Item ".\Desktop" "Sample.txt"

#>
# =================================================== #

<#
┌──────────────────────────┐

                フォルダ/ファイル生成

└──────────────────────────┘
#>
function global:CreateItem($DirFlg,$ItemName){
    switch($DirFlg){
        TRUE{
            New-Item $ItemName -ItemType Directory
        }
        FALSE{
            New-Item $ItemName
        }
    }
}
<#
■概要
フォルダ or ファイルの生成関数
DirFlgで管理し、関数で必要な引数を渡せば
自動でフォルダ/ファイルを生成してくれる。

■引数解説
①引数:DirFlg　ディレクトリ(フォルダ)生成フラグ
    TRUE  → ディレクトリを生成
    FALSE → ファイルを生成
②引数:ItemName　アイテム名(パスを含む)
■使い方
最初にCreateItem.ps1を呼ぶ
CreateItem <DirFlg> <対象パス(ファイル名)>を入れる

<Sample>
.\Createitem.ps1

1.フォルダの場合
CreateItem TRUE "Sample"
2.ファイルの場合
CreateItem FALSE ".\Sample.txt"
#>
# =================================================== #

<#
┌──────────────────────────┐

        時間付きファイル名の取得

└──────────────────────────┘
#>
Function global:AddCreateItemNameTime($ItemName){

$GetTime      = Get-Date -Format "yyyymmdd-HHmmss"
$GenerateName = $ItemName+"_Date" + $GetTime

return $GenerateName
}
<#
■概要
時間を取得して決めたファイル名と拡張子(.*)を引数で渡し、
ファイル名として合成する。
多くは語るまい

■引数解説
①引数：
②引数：

■使い方
AddCreateItemNameTime <ファイル名> <拡張子>
ファイル名が返ってくる
#>
# =================================================== #


```

###適当

```PowerShell:tekitou.ps1

<#
    サンプル用PowerShellスクリプト
#>
#パッケージ化されたファイルの読み込み
.\PackageScript\CreateItem.ps1
.\PackageScript\SeaftyFlag.ps1

$FilePath =  ".\OutputLog"
$FileName =  "TestLog"
$FileName =  AddCreateItemNameTime $FileName #日時付きファイル名生成関数
$FileName += ".log"

Write-Host $FileName

CHKFlg #-------------------------------------- 安全装置フラグ確認関数

CHK_Item  $FilePath $FileName #--------------- フォルダ/ファイル存在有無確認関数

ChengeFlg #----------------------------------- 安全装置フラグ変更関数
pause


```