Файл журнала, сгенерированный из команды start-transcript, производящей TerminatingError (New-Item) несколько раз - PullRequest
0 голосов
/ 06 января 2020

Я создал сценарий, который удаляет большие двоичные объекты из учетной записи хранения azure в зависимости от срока хранения. Я генерирую файл журнала с помощью start-transcript. Наряду с выводом скрипта он фиксирует приведенную ниже ошибку несколько раз.

PS>TerminatingError(New-Item): "The running command stopped because the preference variable "ErrorActionPreference" or common parameter is set to Stop: Could not find a part of the path 'C:\Windows\system32\config\systemprofile\.Azure\AzInstallationChecks.json'."

Я убедился, что папка. Azure отсутствует в systemprofile. Пожалуйста, дайте мне знать, как это исправить.

ниже приведен скрипт.

try {

$Logpath = "$PSScriptRoot\Logs"
$LogFileNameFormat = "Backup-Retention-$(Get-Date -Format "yyyy-MM-dd-HH-mm").log"
$LogFileName = "$Logpath\$LogFileNameFormat"
If (Test-Path $LogFileName) {
    Remove-Item $LogFileName -Force
    New-Item $LogFileName -ItemType file -Force
}
Else {
    New-Item $LogFileName -ItemType file
}
Start-Transcript $LogFileName
Import-Module AzureRM
$Params = Get-Content $PSScriptRoot\Retention.json | ConvertFrom-Json

$StorageAccount = $Params.StorageAccount
$StorageAccountKey = $Params.Key
$StorageAccountContext = New-AzureStorageContext -StorageAccountName $StorageAccount -StorageAccountKey $StorageAccountKey
$Blobs = Get-AzureStorageBlob -Container $Params.ContainerName -Context $StorageAccountContext | Select-Object -ExpandProperty Name

$splitstring = $Blobs | ForEach-Object { [regex]::Split($_, "/")[0]}
$datetimestring = $splitstring | ForEach-Object { [regex]::Split($_, "Backup-")[1]}
$datetimes = $datetimestring  | ForEach-Object {[datetime]::ParseExact($_, "yyyyMMdd-HHmm", $null)}
$retentiontimestamp = (Get-Date).AddDays(-$Params.RententionPeriod)
$old_blobs = @()
"Checking for db backups older than $($Params.RententionPeriod) days."
foreach ($datetime in $datetimes)
{

    if ( $retentiontimestamp -gt $datetime)
    {

        $Blobs | foreach-object { 
            if($_ -match $datetime.ToString("yyyyMMdd-HHmm")) 
            {

                $old_blobs += Get-AzureStorageBlob -Container $Params.ContainerName -Context $StorageAccountContext -Blob $_

            }
        } 
    }

}
if ($old_blobs.Count -gt 0)
{

    "below are the dumps exceed the retention period."
    "================================================="
    $old_blobs.Name
    "================================================="
    foreach($old_blob in $old_blobs)
    {

        "deleting $($old_blob.Name)"
        Remove-AzureStorageBlob -Blob $old_blob.Name -Container $Params.ContainerName -Context $StorageAccountContext
    }
    "================================================="
}
else {
    "No blobs crossed the retention period."

}
}
catch {
Write-Output "$($Params.ClientName) Prod DB backup retention script failed : $($_.Exception.Message)"
Stop-Transcript
Send-Email -Message '<h3 style="color:#FF0000;"> $($Params.ClientName) Prod DB backup script failed. Please refer the attached logs for more information.</h3>' -Highpriority
}

try{
Stop-Transcript
Send-Email -Message "<h3 style='color:#00A90A;'>$($Params.ClientName) Prod DB backup retention script successfully executed. Please refer the attached logs for more information.</h3>"
  }
  catch{
Write-Output "$($Params.ClientName) Prod DB backup retention script: Failed to send email. $($_.Exception.Message)"
Stop-Transcript
  }

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

Я обнаружил, что AzInstallationChecks. json присутствует в моем локальном профиле пользователя. Я скопировал тот же файл по указанному выше пути, который исправил проблему.

0 голосов
/ 07 января 2020

Возможная проблема заключается в том, что при создании файла (с помощью командлета new-item) некоторые пути в пути не существуют.

Попробуйте добавить -force в конце new-item Командлет в выражении else, как показано ниже:

try{
    $Logpath = "$PSScriptRoot\Logs"
    $LogFileNameFormat = "Backup-Retention-$(Get-Date -Format "yyyy-MM-dd-HH-mm").log"
    $LogFileName = "$Logpath\$LogFileNameFormat"

    If (Test-Path $LogFileName) {
        Remove-Item $LogFileName -Force
        New-Item $LogFileName -ItemType file -Force
    }
    Else {

        # add -Force here
        New-Item $LogFileName -ItemType file -Force
    }

#your other code.

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...