@echo off

rem ファイル名:02_CallPowerShellScript.bat
rem 【備考】
rem ・本ファイルは、「管理者として実行」で実行して下さい。
rem ・環境により修正が必要な箇所には★を記載してあります。

rem 変数を初期化
set myVar_PrePolicy=
set myVar_CurrentPolicy=

rem ----------------------------------------
rem PowerShell実行ポリシ変更。
rem ----------------------------------------
rem Step1: 現時点での、PowerShellの実行権限値を取得。
echo;
echo 現時点での、PowerShellの実行権限値は、
for /f "usebackq tokens=*" %%i IN (`C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "Get-ExecutionPolicy"`) DO @set myVar_PrePolicy=%%i
echo %myVar_PrePolicy%
echo です。

rem Step2: PowerShellの実行権限値を、RemoteSigned に変更。
echo;
echo PowerShellの実行権限を、RemoteSigned に変更します。
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "Set-ExecutionPolicy RemoteSigned"
echo;
echo PowerShellの実行権限を、RemoteSigned に変更しました。

rem Step3: 現時点での、PowerShellの実行権限値を取得。
echo;
echo 現時点での、PowerShellの実行権限値は、
for /f "usebackq tokens=*" %%i IN (`C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "Get-ExecutionPolicy"`) DO @set myVar_CurrentPolicy=%%i
echo %myVar_CurrentPolicy%
echo です。


rem ----------------------------------------
rem PowerShellスクリプト実行/PowerShellスクリプト呼び出し実行。
rem ----------------------------------------
rem ※PowerShell処理を実行する場合には、ここ以降に記載する。
rem 

powershell.exe -Command "Set-ExecutionPolicy RemoteSigned; ".\03_RemoveOldFile_cam1.ps1";


powershell.exe -Command "Set-ExecutionPolicy RemoteSigned; ".\04_Robocopy_cam1.ps1"; exit $LASTEXITCODE"
echo エラーレベルは、 %errorlevel% です。


powershell.exe -Command "Set-ExecutionPolicy RemoteSigned; ".\05_OpenFolder.ps1";



rem ●PowerShellの実行権限値を、元に戻す。
echo;
echo PowerShellの実行権限を、元に戻します。
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "Set-ExecutionPolicy '%myVar_PrePolicy%'"
echo;
echo PowerShellの実行権限を、元に戻しました。

rem ●現時点での、PowerShellの実行権限値を取得。
echo;
echo 現時点での、PowerShellの実行権限値は、
for /f "usebackq tokens=*" %%i IN (`C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe "Get-ExecutionPolicy"`) DO @set myVar_CurrentPolicy=%%i
echo %myVar_CurrentPolicy%
echo です。
pause





#ファイル名:03_RemoveOldFile_cam1.ps1
#【備考】
#・環境により修正が必要な箇所には、★を記載してあります。
#

#対象ファイル★
$FileName = "*.jpg"

#対象パス★
$Path = "D:\見守りカメラ\カメラ画像\cam1"

#削除対象日付設定(x日以上前のものを削除)★
$Days = 5

$GetPath = $Path + "\*.*"

#取得
$Files = Get-ChildItem $GetPath | Where-Object {$_.LastWriteTime -lt (Get-Date).Adddays(-$Days)} 

#実行
If ($Files.Count -gt 0) {
Remove-Item $Files
}


#ファイル名:03_Robocopy_cam1.ps1
#【備考】
#・環境により修正が必要な箇所には、★を記載してあります。
#

#★
$myVar_logfile= ".\03_Robocopy_cam1_log.log"
#★
$myVar_CopySourceFolder= "\\10.0.0.1\motion\cam1"
#★
$myVar_CopyDestFolder= "D:\見守りカメラ\カメラ画像\cam1\"


##################################################
#ファイルのコピーが成功した時用の関数(ここから)
#<処理概要>
#ps1ファイルを呼び出したBATファイルに、戻り値として0を返す用。

function myFunc_return0 {
  exit 0
}
#ファイルのコピーが成功した時用の関数(ここまで)
##################################################

##################################################
#ファイルのコピーが失敗した時用の関数(ここから)
#<処理概要>
#ps1ファイルを呼び出したBATファイルに、戻り値として1を返す用。

function myFunc_return1 {
  exit 1
}
#ファイルのコピーが失敗した時用の関数(ここまで)
##################################################


function Start-Executable {
  param(
    [String] $FilePath,
    [String[]] $ArgumentList
  )
  $OFS = " "
  $process = New-Object System.Diagnostics.Process
  $process.StartInfo.FileName = $FilePath
  $process.StartInfo.Arguments = $ArgumentList
  $process.StartInfo.UseShellExecute = $false
  $process.StartInfo.RedirectStandardOutput = $true
  if ( $process.Start() ) {
    $output = $process.StandardOutput.ReadToEnd() -replace "\r\n$",""
    if ( $output ) {
      if ( $output.Contains("`r`n") ) {
        $output -split "`r`n"
      }
      elseif ( $output.Contains("`n") ) {
        $output -split "`n"
      }
      else {
        $output
      }
    }
    $process.WaitForExit()
#    & "$Env:SystemRoot\system32\cmd.exe" /c exit $process.ExitCode
  }

#return $process.ExitCode


$Global:ReturnCode=$process.ExitCode

}




#ログファイルの存在有無調査&存在しなければ作成する。
if(-not(Test-Path -path $myVar_logfile)) { 
  New-Item -Path $myVar_logfile -ItemType file -Value $(Get-Date) -force 
} else {
}



#戻り値を0で初期化。
$Global:ReturnCode=0



$Nowtime = Get-Date -Format yyyy/MM/dd_HH:mm:ss
$msg = $NowTime + " " + "▽Robocopy処理を実施します。"
Write-Host $msg
Write-Output $msg | Out-File $myVar_logfile -encoding Default


#######################################################
#Robocopy処理。(ここから)


$Nowtime = Get-Date -Format yyyy/MM/dd_HH:mm:ss
$msg = $NowTime + " " + "Robocopy処理を開始します。"
Write-Host $msg
Write-Output $msg | Out-File $myVar_logfile -append -encoding Default


#★
#$result = robocopy.exe $myVar_CopySourceFolder $myVar_CopyDestFolder /Copy:DAT /PURGE /E /R:3 /TEE /LOG:D:\見守りカメラ\ScriptFile\Robo_cam1.log
#★
$result =(Start-Executable robocopy.exe $myVar_CopySourceFolder,$myVar_CopyDestFolder,"/Copy:DAT /PURGE /E /R:3 /W:10 /TEE /LOG:D:\見守りカメラ\ScriptFile\Robo_cam1.log" )



Write-Host "結果(ここから)"
#Write-Output $result

Write-Output $Global:ReturnCode

switch($Global:ReturnCode){
  16      {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "( ***FATAL ERROR*** )";$Global:ReturnCode=1}
  15      {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "( FAIL MISM XTRA COPY)";$Global:ReturnCode=1}
  14      {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "( FAIL MISM XTRA     )";$Global:ReturnCode=1}
  13      {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "( FAIL MISM      COPY)";$Global:ReturnCode=1}
  12      {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "( FAIL MISM          )";$Global:ReturnCode=1}
  11      {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "( FAIL      XTRA COPY)";$Global:ReturnCode=1}
  10      {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "( FAIL      XTRA     )";$Global:ReturnCode=1}
  9       {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "( FAIL           COPY)";$Global:ReturnCode=1}
  8       {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "( FAIL               )";$Global:ReturnCode=1}
  7       {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "(      MISM XTRA COPY)";$Global:ReturnCode=0}
  6       {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "(      MISM XTRA     )";$Global:ReturnCode=0}
  5       {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "(      MISM      COPY)";$Global:ReturnCode=0}
  4       {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "(      MISM          )";$Global:ReturnCode=0}
  3       {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "(           XTRA COPY)";$Global:ReturnCode=0}
  2       {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "(           XTRA     )";$Global:ReturnCode=0}
  1       {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "(                COPY)";$Global:ReturnCode=0}
  0       {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "(    --no change--   )";$Global:ReturnCode=0}
  default {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "( 該当エラーコード不明。)";$Global:ReturnCode=1}
}


Write-Host "結果(ここまで)"

#Robocopyコマンドの結果判定処理。
if ( $Global:ReturnCode -eq 0) {

  $Nowtime = Get-Date -Format yyyy/MM/dd_HH:mm:ss
  $msg = $NowTime + " " + "Robocopy処理が成功しました。"
  Write-Host $msg
  Write-Output $msg | Out-File $myVar_logfile -append -encoding Default

  myFunc_return0

} else {

  $Nowtime = Get-Date -Format yyyy/MM/dd_HH:mm:ss
  $msg = $NowTime + " " + "Robocopy処理が失敗しました。"
  Write-Host $msg
  Write-Output $msg | Out-File $myVar_logfile -append -encoding Default

  myFunc_return1

}

#Robocopy処理。(ここまで)
#######################################################
$Nowtime = Get-Date -Format yyyy/MM/dd_HH:mm:ss
$msg = $NowTime + " " + "△Robocopy処理を完了しました。"
Write-Host $msg
Write-Output $msg | Out-File $myVar_logfile -append -encoding Default



#ファイル名:02_Connect-Copy.ps1
#【備考】
#・本ファイルの実行には、PowerShellver2以降が必須です。
# ※バージョンは、PowerShell画面にて、「$Host.Version」で確認可能。
#・環境により修正が必要な箇所には、★を記載してあります。
#

#ログファイル★
$myVar_logfile="02_Connect-Copy.log"

#WinSCPnet.dllパス★
$myWinSCP_WinSCPnet_dll_Path="D:\BackupTest\ProgramFile\WinSCP\WinSCPnet.dll"

#WinSCP接続方式(SFTP or SCP or FTP)★
$myWinSCP_ConnectProtocol="SCP"

#WinSCP接続先★
$myWinSCP_ConnectTarget="10.0.0.1"

#WinSCP接続先ログインユーザ名★
$myWinSCP_UserName="root"

#WinSCP接続先ログインパスワード★
$myWinSCP_Password="xxxxxxxxxx"

#WinSCP接続先SSHホストキーのフィンガープリント★
#フィンガープリントについては、実環境で下記を実施して確認する。
# WinSCP接続元サーバのコマンドプロンプトで、winscp.com 起動。
# open XXX.XXX.XXX.XXX
# 質問文が出たら「N」押下。
# ど充┐気譴織侫ンガープリント値を、下記に記載する。
#例>$myWinSCP_SshHostKeyFingerprint="ssh-ed25519 256 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
#例>$myWinSCP_SshHostKeyFingerprint="ssh-rsa 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
$myWinSCP_SshHostKeyFingerprint="ssh-ed25519 256 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"

#===========================================================
#ファイルのコピーが成功した時用の関数(ここから)
#<処理概要>
#このps1ファイルを呼び出したBATファイルに、戻り値として0を返す。
function myFunc_return0 {
 exit 0
}
#ファイルのコピーが成功した時用の関数(ここまで)
#===========================================================

#===========================================================
#ファイルのコピーが失敗した時用の関数(ここから)
#<処理概要>
#このps1ファイルを呼び出したBATファイルに、戻り値として1を返す。
function myFunc_return1 {
 exit 1
}
#ファイルのコピーが失敗した時用の関数(ここまで)
#===========================================================


#ログファイルの存在有無調査&なければ作成する。
if(-not(Test-Path -path &myVar_logfile)){
 New-Item -Path $myVar_logfile -ItemType file -Value $(Get-Date) -force
} else {
}

#戻り値を0で初期化。
$Global:ReturnCode=0

#----------------------------------------------------------------
#コピー処理。(ここから)
$NowTime=Get-Date -Format yyyy/MM/dd_HH:mm:ss
$msg=$NowTime + " " + "▽WinSCPコピー処理開始。"
Write-Host $msg
Write-Output $msg | Out-File $myVar_logfile -encoding Default

try
{
 #ウインドウズフォームをロード。
 [void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")


    # Load WinSCP .NET assembly (パスは環境によって変更してください)
    [Reflection.Assembly]::LoadFrom($myWinSCP_WinSCPnet_dll_Path) | Out-Null

    # Setup session options
    $sessionOptions = New-Object WinSCP.SessionOptions
    $sessionOptions.Protocol = [WinSCP.Protocol]::$myWinSCP_ConnectProtocol
    $sessionOptions.HostName = $myWinSCP_ConnectTarget
    $sessionOptions.UserName = $myWinSCP_UserName
    #$sessionOptions.Password = $myWinSCP_Password
    $sessionOptions.SshHostKeyFingerprint = $myWinSCP_SshHostKeyFingerprint
    $session = New-Object WinSCP.Session

    try
    {
        $msg="接続先ホスト: " + $sessionOptions.HostName
        Write-Host $msg
        Write-Output $msg | Out-File $myVar_logfile -append -encoding Default

        # Connect
        $session.Open($sessionOptions)

        # Upload files バイナリモードを設定
        $transferOptions = New-Object WinSCP.TransferOptions
        $transferOptions.TransferMode = [WinSCP.TransferMode]::Binary

        #リモートファイルをローカルにコピー1 (ここから)
        #接続先の指定ファイルを、ローカルの指定場所にコピー。★
        #3つめの引数は、$TRUEで移動、$FALSEでコピーの意味。★
        $transferResult = $session.GetFiles("/backup/data/conf/*.gz","D:\backup\BackupData\TestSrv1\DailyBackup\1st\", $FALSE, $transferOptions)

        # Throw on any error
        $transferResult.Check()

        # 結果を表示&ログ出力。
        foreach ($transfer in $transferResult.Transfers)
        {
            Write-Host ("Download of {0} succeeded" -f $transfer.FileName)
            Write-Output ("Download of {0} succeeded" -f $transfer.FileName) | Out-File $myVar_logfile -append -encoding Default
        }
        #リモートファイルをローカルにコピー1 (ここまで)

        #リモートファイルをローカルにコピー2 (ここから)
        #接続先の指定ファイルを、ローカルの指定場所にコピー。★
        #3つめの引数は、$TRUEで移動、$FALSEでコピーの意味。★
        $transferResult = $session.GetFiles("/backup/data/conf/*.out","D:\backup\BackupData\TestSrv1\DailyBackup\1st\", $FALSE, $transferOptions)

        # Throw on any error
        $transferResult.Check()

        # 結果を表示&ログ出力。
        foreach ($transfer in $transferResult.Transfers)
        {
            Write-Host ("Download of {0} succeeded" -f $transfer.FileName)
            Write-Output ("Download of {0} succeeded" -f $transfer.FileName) | Out-File $myVar_logfile -append -encoding Default
        }
        #リモートファイルをローカルにコピー2 (ここまで)


    }
    finally
    {
        # Disconnect, clean up
        $session.Dispose()
    }

    $NowTime=Get-Date -Format yyyy/MM/dd_HH:mm:ss
    $msg=$NowTime + " " + "コピー処理が成功しました。"
    Write-Host $msg
    Write-Output $msg | Out-File $myVar_logfile -append -encoding Default

    $NowTime=Get-Date -Format yyyy/MM/dd_HH:mm:ss
    $msg=$NowTime + " " + "△WinSCPコピー処理完了。"
    Write-Host $msg
    Write-Output $msg | Out-File $myVar_logfile -append -encoding Default


    myFunc_return0
}

catch [Exception]
{
    #エラーが出たらダイアログを出して気がついてもらう
    #[System.Windows.Forms.MessageBox]::Show($_.Exception.Message, "コピー処理が失敗しました。",[Windows.Forms.MessageBoxButtons]::OK,[Windows.Forms.MessageBoxIcon]::Error);
    
    $NowTime=Get-Date -Format yyyy/MM/dd_HH:mm:ss
    $msg=$NowTime + " " + "コピー処理が失敗しました。"
    Write-Host $msg
    Write-Output $msg | Out-File $myVar_logfile -append -encoding Default

    $NowTime=Get-Date -Format yyyy/MM/dd_HH:mm:ss
    $msg=$NowTime + " " + "△WinSCPコピー処理完了。"
    Write-Host $msg
    Write-Output $msg | Out-File $myVar_logfile -append -encoding Default

    myFunc_return1
}



#ファイル名:03_SendMail.ps1
#【備考】
#・本ファイルの実行には、PowerShellver2以降が必須です。
# ※バージョンは、PowerShell画面にて、「$Host.Version」で確認可能。
#・環境により修正が必要な箇所には、★を記載してあります。
#


#SendMailログファイル★
$myVar_logfile=".\03_SendMail.log"

#宛先メアド★
$to="tttt@ttt.com"

#送信元メールアドレス★
$from="ffff@ff.com"

#SMTPサーバ(IP、ホスト名どちらでも可)★
$smtp="ssss.com"

#件名★
$subject="SSSSSSSSSSSSSSSS"

#本文★
[string]$body =@()
$body+="バックアップ実行結果: "
$body+=$args[0]
$body+="です。`n"

#メール送信コマンドを画面表示&ログ出力
$NowTime=Get-Date -Format yyyy/MM/dd_HH:mm:ss
$msg=$NowTime + " " + "▽メール送信処理開始。"
Write-Host $msg
Write-Output $msg | Out-File $myVar_logfile -encoding Default

Write-Host Send-MailMessage -To $to -From $from -SmtpServer $smtp -Subject $subject -Body $body -Encoding ([System.Text.Encoding]::UTF8)
Write-Output Send-MailMessage -To $to -From $from -SmtpServer $smtp -Subject $subject -Body $body -Encoding ([System.Text.Encoding]::UTF8) | Out-File $myVar_logfile -append -encoding Default

#メールを送信します。★送信したくない場合にはコメントアウトしてテストすること。
Send-MailMessage -To $to -From $from -SmtpServer $smtp -Subject $subject -Body $body -Encoding ([System.Text.Encoding]::UTF8)

$NowTime=Get-Date -Format yyyy/MM/dd_HH:mm:ss
$msg=$NowTime + " " + "△メール送信処理完了。"
Write-Host $msg
Write-Output $msg | Out-File $myVar_logfile -append -encoding Default


#ファイル名:05_OpenFolder.ps1
#
#
#

#エクスプローラでの開示対象フォルダ指定★
$myIO_OpenFolder = [IO.FileInfo]"D:\見守りカメラ\カメラ画像\cam1\"

#フォルダオープン
Invoke-Item $myIO_OpenFolder

●Robocopy処理を実施する。

ps1ファイル呼び出しBATファイル内容
@echo off

powershell.exe -Command "Set-ExecutionPolicy RemoteSigned; "D:\20170618_powershellテスト\Robocopy.ps1"; exit $LASTEXITCODE"

echo %errorlevel%

pause



Robocopy.ps1ファイル内容
$myVar_logfile= "D:\20170618_powershellテスト\Powershell_Robocopy.log"
$myVar_CopySourceFolder= "D:\20160414"
$myVar_CopyDestFolder= "D:\20160414-2"


##################################################
#ファイルのコピーが成功した時用の関数(ここから)
#<処理概要>
#ps1ファイルを呼び出したBATファイルに、戻り値として0を返す用。

function myFunc_return0 {
  exit 0
}
#ファイルのコピーが成功した時用の関数(ここまで)
##################################################

##################################################
#ファイルのコピーが失敗した時用の関数(ここから)
#<処理概要>
#ps1ファイルを呼び出したBATファイルに、戻り値として1を返す用。

function myFunc_return1 {
  exit 1
}
#ファイルのコピーが失敗した時用の関数(ここまで)
##################################################


function Start-Executable {
  param(
    [String] $FilePath,
    [String[]] $ArgumentList
  )
  $OFS = " "
  $process = New-Object System.Diagnostics.Process
  $process.StartInfo.FileName = $FilePath
  $process.StartInfo.Arguments = $ArgumentList
  $process.StartInfo.UseShellExecute = $false
  $process.StartInfo.RedirectStandardOutput = $true
  if ( $process.Start() ) {
    $output = $process.StandardOutput.ReadToEnd() -replace "\r\n$",""
    if ( $output ) {
      if ( $output.Contains("`r`n") ) {
        $output -split "`r`n"
      }
      elseif ( $output.Contains("`n") ) {
        $output -split "`n"
      }
      else {
        $output
      }
    }
    $process.WaitForExit()
#    & "$Env:SystemRoot\system32\cmd.exe" /c exit $process.ExitCode
  }

#return $process.ExitCode


$Global:ReturnCode=$process.ExitCode

}




#ログファイルの存在有無調査&存在しなければ作成する。
if(-not(Test-Path -path $myVar_logfile)) { 
  New-Item -Path $myVar_logfile -ItemType file -Value $(Get-Date) -force 
} else {
}



#戻り値を0で初期化。
$Global:ReturnCode=0



$Nowtime = Get-Date -Format yyyy/MM/dd_HH:mm:ss
$msg = $NowTime + " " + "▽Robocopy処理を実施します。"
Write-Host $msg
Write-Output $msg | Out-File $myVar_logfile -append -encoding Default


#######################################################
#Robocopy処理。(ここから)


$Nowtime = Get-Date -Format yyyy/MM/dd_HH:mm:ss
$msg = $NowTime + " " + "Robocopy処理を開始します。"
Write-Host $msg
Write-Output $msg | Out-File $myVar_logfile -append -encoding Default



#$result = robocopy.exe $myVar_CopySourceFolder $myVar_CopyDestFolder /Copy:DAT /PURGE /E /R:3 /NP

$result =(Start-Executable robocopy.exe $myVar_CopySourceFolder,$myVar_CopyDestFolder,"/Copy:DAT /PURGE /E /R:3 /W:10 /NP" )



Write-Host "aaaaaaaaaaaaaaaaaa"
#Write-Output $result

Write-Output $Global:ReturnCode

switch($Global:ReturnCode){
  16      {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "( ***FATAL ERROR*** )";$Global:ReturnCode=1}
  15      {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "( FAIL MISM XTRA COPY)";$Global:ReturnCode=1}
  14      {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "( FAIL MISM XTRA     )";$Global:ReturnCode=1}
  13      {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "( FAIL MISM      COPY)";$Global:ReturnCode=1}
  12      {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "( FAIL MISM          )";$Global:ReturnCode=1}
  11      {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "( FAIL      XTRA COPY)";$Global:ReturnCode=1}
  10      {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "( FAIL      XTRA     )";$Global:ReturnCode=1}
  9       {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "( FAIL           COPY)";$Global:ReturnCode=1}
  8       {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "( FAIL               )";$Global:ReturnCode=1}
  7       {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "(      MISM XTRA COPY)";$Global:ReturnCode=0}
  6       {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "(      MISM XTRA     )";$Global:ReturnCode=0}
  5       {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "(      MISM      COPY)";$Global:ReturnCode=0}
  4       {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "(      MISM          )";$Global:ReturnCode=0}
  3       {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "(           XTRA COPY)";$Global:ReturnCode=0}
  2       {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "(           XTRA     )";$Global:ReturnCode=0}
  1       {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "(                COPY)";$Global:ReturnCode=0}
  0       {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "(    --no change--   )";$Global:ReturnCode=0}
  default {Write-Host "RobocopyReturnCode:" $Global:ReturnCode "( 該当エラーコード不明。)";$Global:ReturnCode=1}
}


Write-Host "bbbbbbbbbbbbbbbbbb"

#Robocopyコマンドの結果判定処理。
if ( $Global:ReturnCode -eq 0) {

  $Nowtime = Get-Date -Format yyyy/MM/dd_HH:mm:ss
  $msg = $NowTime + " " + "Robocopy処理が成功しました。"
  Write-Host $msg
  Write-Output $msg | Out-File $myVar_logfile -append -encoding Default

  myFunc_return0

} else {

  $Nowtime = Get-Date -Format yyyy/MM/dd_HH:mm:ss
  $msg = $NowTime + " " + "Robocopy処理が失敗しました。"
  Write-Host $msg
  Write-Output $msg | Out-File $myVar_logfile -append -encoding Default

  myFunc_return1

}

#Robocopy処理。(ここまで)
#######################################################



●IPアドレスの値のみ表示する。

$NicName = "イーサネット"
Get-NetIPAddress -InterfaceAlias $NicName | select -ExpandProperty IPAddress
#変数を削除。
Remove-Variable NicName

●サブネットマスク値のみ表示する。

$NicName = "イーサネット"
$CIDR = Get-NetIPAddress -InterfaceAlias $NicName | select -ExpandProperty PrefixLength
$intCIDR = [int]$CIDR
for( $i = 0 ; $i -lt 4 ; $i++ ){
 # all 1
 if( $intCIDR -ge 8 ){
  $Subnet += "255"
  $intCIDR -= 8
 }
 # all 0
 elseif($intCIDR -le 0){
  $Subnet += "0"
  $intCIDR = 0
 }
 else{
  # オクテット内 CIDR で表現できる最大数
  $intNumberOfNodes = [Math]::Pow(2,8 - $intCIDR)
  # サブネットマスクを求 める
  $intSubnetOct = 256 - $intNumberOfNodes
  $Subnet += [string]$intSubnetOct
  $intCIDR = 0
 }

 # ラストオクテットにはピリオドを付けない
 if( $i -ne 3 ){
  $Subnet += "."
 }
}
$Subnet

#変数削除
Remove-Variable NicName
Remove-Variable CIDR
Remove-Variable intCIDR
Remove-Variable Subnet

●デフォルトゲートウェイの値のみ表示する。

$NicName = "イーサネット"
Get-NetRoute -destinationprefix 0.0.0.0/0 -InterfaceAlias $NicName | select -ExpandProperty NextHop
#変数を削除。
Remove-Variable NicName
※下記でも可能。
Get-WmiObject -Class Win32_IP4RouteTable | where { $_.destination -eq '0.0.0.0' -and $_.mask -eq '0.0.0.0'} | Sort-Object metric1 | select -ExpandProperty nexthop



●IPアドレスの設定

StaticIP→DHCP
<概要>
Batファイルを、「管理者として実行」で実行することにより、
PS1ファイルを実行させて、IP設定を変更させる。

<BATファイル>
※下記をbatファイルとして保存する。
@ECHO OFF
rem ps1ファイルを実行。
powershell.exe "& 'C:\Users\user1\Desktop\0000-temp_IE\20170105 テスト\LAN1_DHCP.ps1'"

<PowerShellスクリプト>
※下記をps1ファイルとして保存する。
#IPアドレス変更(DHCP)用PowerShellスクリプト

#現在のPowershellの権限の値を取得し、変数に格納。
$CurrentPolicy = Get-ExecutionPolicy
#Powershellの権限を、Unrestrictedに変更。
#Set-ExecutionPolicy Unrestricted -Confirm:$false
Get-ExecutionPolicy

Read-Host "続けるにはEnterキーを押して下さい" 

#PowerShellを、「管理者として実行」画面で表示させる。
# ※「ユーザアカウント制御」画面が表示されるので、「はい」押下する。
#Start-Process powershell.exe -Verb runas

$NicName = "イーサネット"

#現在のデフォルトゲートウェイの値を取得し、変数に格納。
$CurrentDefaultGateway = Get-NetRoute -destinationprefix 0.0.0.0/0 -InterfaceAlias $NicName | select -ExpandProperty NextHop

#ヾ存の、デフォルトゲートウェイの値をクリアする。
# ※この1つはクリアしてから出ないと、
#  DHCPによってデフォゲの値に、古い値が残ってしまう。
Remove-NetIPAddress -InterfaceAlias $NicName -DefaultGateway "$CurrentDefaultGateway" -Confirm:$false

#既存の、DNSサーバの値をクリアする。
Set-DnsClientServerAddress -InterfaceAlias $NicName -ResetServerAddresses

#IPアドレス取得方法を、DHCPにする。
Set-NetIPInterface -InterfaceAlias $NicName -Dhcp Enabled

Read-Host "続けるにはENTERキーを押して下さい" 
DHCP→StaticIP
<概要>
Batファイルを、「管理者として実行」で実行することにより、
PS1ファイルを実行させて、IP設定を変更させる。

<BATファイル>
※下記をbatファイルとして保存する。
@ECHO OFF
rem ps1ファイルを実行。
powershell.exe "& 'C:\Users\user1\Desktop\0000-temp_IE\20170105 テスト\LAN1_StaticIP.ps1'"

<PowerShellスクリプトファイル>
※下記をps1ファイルとして保存する。
#IPアドレス変更(固定IP)用PowerShellスクリプト

#現在のPowershellの権限の値を取得し、変数に格納。
$CurrentPolicy = Get-ExecutionPolicy
#Powershellの権限を、Unrestrictedに変更。
#Set-ExecutionPolicy Unrestricted -Confirm:$false
Get-ExecutionPolicy

Read-Host "続けるにはEnterキーを押して下さい" 

#PowerShellを、「管理者として実行」画面で表示させる。
# ※「ユーザアカウント制御」画面が表示されるので、「はい」押下する。
#Start-Process powershell.exe -Verb runas

$NicName = "イーサネット"

$NewIPAddress1 = "192.168.110.105"
$NewSubnetMask1 = "255.255.255.0"

$NewIPAddress2 = "192.168.20.105"
$NewSubnetMask2 = "255.255.255.0"

$NewDNS1 = "192.168.110.1"
$NewDNS2 = "192.168.110.2"
$NewDNS3 = "192.168.110.3"

$NewDefaultGateway1 = "192.168.110.1"

#新しいサブネットマスク値を、CIDR形式に変換。(設定する際に、コマンドにCIDR書式で渡す必要あるため)
function Oct_to_CIDR($value){
 $NewSubnetOct = $value -split "\."
 $intNewSubnetCIDR = 0
 for( $i = 0 ; $i -lt 4 ; $i++ ){
  # オクテット内のビットマスクを作る
  $intNewSubnetOct = $NewSubnetOct[$i]
  $strBitMask = [Convert]::ToString($intNewSubnetOct,2) 
 
  # マスクのビット長カウント
  for( $j = 0 ; $j -lt 8; $j++ ){
   if( $strBitMask[$j] -eq "1" ){
    $intNewSubnetCIDR++
   }
  }
 }
 return [string]$intNewSubnetCIDR
}

#現在のIPアドレスの値を取得し、変数に格納。
$CurrentIPAddress = Get-NetIPAddress -InterfaceAlias $NicName | select -ExpandProperty IPAddress

#現在のデフォルトゲートウェイの値を取得し、変数に格納。
$CurrentDefaultGateway = Get-NetRoute -destinationprefix 0.0.0.0/0 -InterfaceAlias $NicName | select -ExpandProperty NextHop

#ヾ存の、IPアドレスとデフォルトゲートウェイの値をクリアする。
# ※この2つはクリアしてから出ないと、設定時にエラーが出て設定できないので、この作業は必須。
# ※既存のIPが、DHCPによって配布されたIPの場合には、「-IPAddress "xxx.xxx.xxx.xxx"」の箇所は不要。
#  (デフォルトゲートウェイの値は削除する必要あり。)
Remove-NetIPAddress -InterfaceAlias $NicName -IPAddress "$CurrentIPAddress" -DefaultGateway "$CurrentDefaultGateway" -Confirm:$false

#既存の、DNSサーバの値をクリアする。
Set-DnsClientServerAddress -InterfaceAlias $NicName -ResetServerAddresses

#新しい、IPアドレス、サブネットマスク、デフォルトゲートウェイ の値を設定する。
$NewSubnetCIDR1 = Oct_to_CIDR $NewSubnetMask1
New-NetIPAddress -InterfaceAlias $NicName -IPAddress "$NewIPAddress1" -AddressFamily IPv4 -PrefixLength "$NewSubnetCIDR1" -DefaultGateway "$NewDefaultGateway1"

#た靴靴ぁDNSサーバ の値を設定する。
Set-DnsClientServerAddress -InterfaceAlias $NicName -ServerAddresses "$NewDNS1", "$NewDNS2","$NewDNS3"

#新しい、2つ目の、IPアドレス、サブネットマスク の値を設定する。
$NewSubnetCIDR2 = Oct_to_CIDR $NewSubnetMask2
New-NetIPAddress -InterfaceAlias $NicName -IPAddress "$NewIPAddress2" -AddressFamily IPv4 -PrefixLength "$NewSubnetCIDR2"

#Nicの、無効化・有効化をしたい場合には、下記実施。
# ※Disable-NetAdapter操作は、PowerShellの実行画面を、「管理者として実行」で実行しておく必要あり。
Disable-NetAdapter -Name $NicName -Confirm:$false
Enable-NetAdapter -Name $NicName

#変数を削除。
Remove-Variable NicName
Remove-Variable CurrentIPAddress
Remove-Variable CurrentDefaultGateway

Set-ExecutionPolicy $CurrentPolicy -Confirm:$false
Get-ExecutionPolicy

Read-Host "続けるにはENTERキーを押して下さい" 


<参考HP>
http://qiita.com/hanakara_milk/items/1197ac9b91fa1...
http://qiita.com/syui/items/7d42d7e691010ee212fb
http://qiita.com/k-yamawaki/items/7125f33845315d81...
※確認メッセージを出さないようにする。
 http://qiita.com/Kirito1617/items/aed439bcb66c6348...
※優先DNS、代替DNS、その他追加DNSサーバ の設定。
 https://blogs.technet.microsoft.com/heyscriptinggu...

●PowerShellで複数のExcelファイルを一括検索する

●OSサービスの一覧を、htmlファイルに出力する。


<例>
Get-Service | ConvertTO-HTML -Property Name,Status > D:\xxxx.html


●OSサービスの一覧を、CSVファイルに出力する。


<例>
Get-Service | Export-CSV D:\xxxx.csv



●指定したフォルダ配下(サブディレクトリ配下も含む)の、特定の拡張子を持ったファイル一覧を、テキストファイルに出力する。


<例>Dドライブ内の、mp3もしくはwavファイルを、d:\temp.m3uファイルに、絶対パスで出力する。
Get-ChildItem D:\ -Recurse -include *.mp3,*.mp4 | ?{ $_.Length -ne $null } | Select-Object Fullname | Out-File -filePath "d:\temp.m3u" -encoding Default


●Windows2003にて、リモート(windows2003)のサーバの、タスクスケジューラの状態を表示する

例>リモートサーバ(OS:WindowsServer2003、IP:192.168.20.1、ログインユーザ:Administrator、ログインパスワード:Adminpass1)上の、
  「TestTask1」という名前のタスクの、現在の状態を表示する場合。
$taskinfo=(schtasks.exe /query /v /fo csv /s 192.168.20.1 /u Administrator /p Adminpass1 | convertfrom-csv) | ? {$_.タスク名 -eq "TestTask1"}
$taskinfo.状態



●OSサービス関係

・サービス一覧表示
Get-Service

・サービス一覧表示(表形式で表示)
Get-Service | Out-GridView

・Running状態のサービスのみを一覧表示。
Get-Service | Where Status -like "Running"


●CSVファイルを表形式で表示

import-csv -path .\test.csv | Out-GridView


●pingの応答結果から、リプライの行のみ表示させて実行する。

ping 8.8.8.8 | where-object { $_ -like '*応答*'}

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

▼当HP内検索▼

▼メインメニュー▼



管理者用リンク
書籍(技術書)
・利用ソフト一覧
・Ethereal/Wireshark

転送速度




・powershell

・VBA










・Microsoft SQLserver








●CentOS6.9


▼動画サーバ関係

MP3について
DVDからのMP3変換について?
DVDからの動画変換について



▼自転車関係
・Panasonic CRAZY BOY

▼自動車関係
・SUZUKI エブリワゴンDA62W


▼Linux/Unix関係
・Linux基礎(パッケージ)
・Linux基礎(システム構成)
・Linux(Debian)基本コマンド
・Linuxコマンド(テキスト処理)
・Linuxコマンド(未整理)
・Linuxコマンド(ネットワーク系)
・FedoraCore OS メモ
・Debian Linux OS メモ
・Vine Linux OS メモ
・xPUD メモ

・CentOS6.4(minimal)


・solaris9 メモ
・solaris10 メモ

▼CCNA関係


▼ノートPC関連

液晶パネル

Fujitsu FMV-820MT
・Compaq Evo Notebook N110
・Panasonic Let's note CF-S51R
・Toshiba Dynabook Satellite 1800


▼デスクトップPC関連
・AOpen AX3S Pro-U
・ASUS CUSL2
・ASUS CUSL2-M


▼携帯電話
・NTT DoCoMo FOMA M1000
・FOMA P704iμ


▼モデム関連
▼ADSLモデム
・NTT ADSLモデム-NV
・NEC PA-WD605CV
・NEC PA-WD701CV
▼アナログモデム
・GVC F-1156IV/R9

▼ルータ関連
▼ルータ
・OMRON MR504DV
・FON La Fonera FON2100E
・Cisco Cisco2620
・Cisco4500M
・Cisco1601
  Cisco1603-R
  Cisco1605

・Cisco 共通メモ

・BUFFALO BLR3-TX4L
・I・O DATA NP-BBR
・NEC PA-WB7000/B (AtermWB7000H)
・マイクロ総研 NetGenesis OPT
・Persol PBR001

・YAMAHA NetVolante RTA54i
・FUJITSU NetVehicle-I

▼イーサネットコンバータ関連
・LINKSYS WET11

▼TA関連
・NEC AtermIT60D1L(S)

▼ハブ関連
・Cisco Catalyst 2924-XL-EN
・AlliedTelesis CentreCOM8216XL2
・BUFFALO LSW10/100-8
・corega FSW-5PM
・corega HUB-5PM
・CONTEC RT-1216S

▼NIC関連
・BUFFALO WLI-U2-SG54HP
・PLANEX GW-NS54GMX
・NTT-ME MN SS-LAN CARD 11 HQ

▼プリンタサーバ関連
・corega Pserver
・I・O DATA PLANT ET-FPS1E

▼デジカメ関連
・MINOLTA DiMAGE F100

▼携帯電話ケーブル関連
・BUFFALO IGM-UPDC
・OMRON ME64KTID
・OMRON ME96KTI
・SOURCENEXT SUS-USB-02 REV.1
・UP12 USB-PDC Converter
・DAISO D106

▼その他PC周辺機器
●キーボード
・Bluetoothキーボード BK3001BA
●ハンディターミナル
・ENSO BHT-6500
●ダウンスキャンコンバータ
・SC-TVEX
●CD-ROMドライブ
・NEC CD-2800D
・BUFFALO CDN-D24EX
・BUFFALO DVM-RDM16IU2
●MOドライブ
・ELECOM LMO-230-S
・FUJITSU MCF3064SS
・FUJITSU SMB-640WL2
●スピーカー
・Justy JSP-10W
●MP3プレーヤ
・SanDisk sansa e130
・NHJ V@mp VP-415
●インタフェースカード
・玄人志向 USB2.0+1394a-CB
・nbj IDE-3525
・Notebook Power Sharing
●ACアダプタ
・Universal AC Adaptor
●マウス
・Logitec Marble Mouse
・needs progres TN-30RFMOSG
●タブレット
・WACOM FAVO(ET-0405-U)
●その他
・IDEAL ME-320X(ME-320U2F)
・KY-05046S-12-H
・LifeView USB CapView
・ハードウェア(その他)
●シリアルレベルコンバータ
・シリアルレベルコンバータ


▼Windows系メモ
・DOS起動ディスク
・Microsoft OS メモ
・Microsoft 系ソフト メモ
・その他 ソフトウェアメモ
・Network Notepad
・Packet Tracerメモ
・パノラマ写真作成ソフト
・トラブル対処履歴


▼プログラミング関連
・言語比較
・VBS
・卒研事前メモ
・卒研メモ
・Windowsプログラミング
・JANコード・ISBNコード相互変換
●C言語
・文字列
・ファイル操作
●アルゴリズム
・再帰アルゴリズム
●JAVA
・Javaプログラミング
●その他
・初心者プログラミング
・ソフトウェア未整理メモ



▼家電関連
●テレビ
・SHARP AQUOS LC-20D10
・FUNAI TV-14CP
・BLUEDOT BTV-900K
・AKART AK-FTV913
・REAL LIFE JAPAN IQ-191LEDTV
AQUOS DZ3シリーズのDLNA機能
Viera V1シリーズのDLNA機能
●プロジェクタ
・crenova XPE470
●AVセレクタ
・DataSystem AVS430
●ビデオ
・FUNAI TV-14CP
●HDD&DVDレコーダ
・Toshiba RD-XS46
・NEC PK-AX10
●DVDプレーヤー
・GREEN HOUSER GH-PDV9AT
・情熱価格 DVDJ-DQ03
●メディアプレーヤー
・MINI HD MEDIA BOX 1080P
・1080P FULL HD Media Player
・1080P HD Media Player Mini 1080
・HD media player

●チューナー
・COMTEC DTW700
・HUMAX CI-S1

●アンテナ
・ADDZEST ZCP107
・マルハマ AGS-590

●ヘッドマウントディスプレイ
・VIRTUAL i/O i-glasses
●電動歯ブラシ
・ブラウン電動歯ブラシ
●電話機
・SHARP DA-C5-B
●コードレス電動ドリル、ドライバ
・BLACK&DECKER CSD300T
・RELIEF 30946?

▼カーナビ関係
Panasonic CN-GP510VD
Panasonic CN-G1100VD
▼カーステレオ関係
Kenwood U585SD

▼おもちゃ関連
●ラジコン
・ラジコンのプロポ改造


▼カー用品関連
●インダッシュTV
・ADDZEST TVS6250


▼DIY関連
・懸垂スタンド
・蓄光塗料


▼電子工作関係
・コネクタピンアサイン
・LANケーブルをAVケーブル化
・LANケーブルをRGBケーブル化
・地上デジタル放送アンテナ
・電子工作 メモ
・乾電池を充電


▼デザイン関連
●腕時計
・腕時計


▼その他

・HP製作関連メモ
・アイデアメモ

・コラム・メモ
・趣味・興味


・ToDo
・ネットインフラ?


▼資格・履歴書・マナー
・資格取得メモ
・工事担任者対策メモ
・履歴書・職務経歴書
・答辞


▼修学旅行 フランス(パリ)


▼掲示板
●掲示板
 意見・苦情・質問用に仮設置。

▼フリーエリア▼

▼おしらせ▼

管理人/副管理人のみ編集できます