2017-12-21 30 views
1

ISEなどで手動で実行すると完全に機能するこのスクリプトを作成しましたが、スケジュールされたタスクから起動すると正しく動作しません。スクリプトはタスクマネージャで正しく実行されませんが、手動で細かく実行されます

ローカルマシンからファイルを削除したり、長期間保存するためにライブラリサーバーにファイルをコピーしたりすることはありませんが、ローカルマシン上にperfmonファイルを作成するだけです。

私は最初にパスをマップするためにPSDriveを使用していましたが、読み込んだ後、タスクスケジューラ経由でPSDriveを使用できないようにハードコードしました。

# Setting variables and creating directories 

$FileDate = Get-Date -Format "MM-dd-yyyy-hh-mm-ss" 
$EmailDateStart = Get-Date -Format "MM/dd-hh:mm:ss" 
$Counters = '\Memory\% Committed Bytes In Use','\Processor Information(_Total)\% Processor Time' 
$Interval = '5' 
$Samples = '60' # There are 720 samples at 5 seconds per sample in an hour, 60 in 5  
$FileDir = "C:\Utilities\CPU_RAM_Stats\Files" 
$BLGPath = "$FileDir\$env:COMPUTERNAME-CPU_RAM_Stats_$FileDate.blg"                 
$BLGFiles = dir $FileDir # Checking local server directory for list of .blg files 
$LibPath = "\\<IP>\d$\CPU_RAM_Stats\$env:COMPUTERNAME" # Destination path of .blg files on Library server 

# Creating destination folder on Library server if it doesn't exist 

if (!(Test-Path $LibPath)) 
{ 
    New-Item "\\<IP>\d$\CPU_RAM_Stats\$env:COMPUTERNAME" -type Directory 
} 

<# ========================= DO NOT CHANGE ANYTHING BELOW THIS POINT ========================= #> 

# Checking existing log file to see if it's over whatever size was specified above (in KB). If so, deleting file and recreating. 

Write-Host "Cleaning up BLG files on Library server to maintain folder size..." 

Get-ChildItem $LibPath -Recurse -Include *.blg | Where{-not $_.PsIsContainer} | Sort CreationTime -desc | Select -Skip 500 | Remove-Item -Force 

# Checking for existence of files in the library server and deleting from PRD server to keep directories clean, otherwise uploading 

foreach ($BLGFile in $BLGFiles) 
{    
    Write-Host "" 
    Write-Host $(Get-Date) "[ACTION][CHECKING BACKUP] Checking if" $BLGFile.name "has been previously uploaded to the library server" -ForegroundColor Gray 
    if (Test-Path "$LibPath\$BLGFile") 
    { 
     Write-Host $(Get-Date) "[ACTION][BACKED UP]" $BLGFile.name "has been previously uploaded to the library server" -ForegroundColor Yellow 
     $Removal = Remove-Item "$FileDir\$BLGFile" 
     $Removal 
     Write-Host $(Get-Date) "[ACTION][DELETED]" $BLGFile.name "has been deleted from the PRD server" -ForegroundColor Magenta 
     Write-Host "" 
    } 
    else 
    { 
     Write-Host $(Get-Date) "[ACTION][NOT BACKED UP]" $BLGFile.name "has NOT been previously uploaded to the library server...continuing to upload" -ForegroundColor Green 

     # Starting main process of checking for locked files and uploading them 

     $FilePath = "$FileDir\$BLGFile" 
     Write-Host $(Get-Date) "[ACTION][FILECHECK] Checking if" $BLGFile.name "is locked" -ForegroundColor Yellow 
     $FileInfo = New-Object System.IO.FileInfo $FilePath 

     try 
     { 
      $fileStream = $fileInfo.Open([System.IO.FileMode]::Open, [System.IO.FileAccess]::Read, [System.IO.FileShare]::Read) 
      Write-Host $(Get-Date) "[ACTION][FILEAVAILABLE]" $BLGFile.name "is not locked and available for upload" -ForegroundColor Green 
      if ($true) 
      { 
       Write-Host $(Get-Date) "Uploading:" $BLGFile.name -ForegroundColor Cyan 
       Write-Host "" 

       Write-Host "Uploading to library server..." -ForegroundColor Cyan 
       Write-Host "" 
       Copy-Item "$FileDir\$BLGFile" "$LibPath" 
       Write-Host $(Get-Date) "[ACTION][COMPLETE] Upload complete!" -ForegroundColor Green 
      } 
      Write-Host "" 
     } 
     catch 
     { 
      Write-Host $(Get-Date) "[ACTION][FILELOCKED]" $BLGFile.name " is locked, not uploaded" -ForegroundColor Red 
     } 
    } 
} 

# Running PerfMon to gather CPU/RAM stats 

$Results = Get-Counter -Counter $Counters -SampleInterval $Interval -MaxSamples $Samples | Export-Counter -Path $BLGPath -Force -FileFormat "BLG" 

EDIT/UPDATE:私は "SYSTEM" ...私は自分のユーザーアカウントに、それを変更したときなど、スケジュールされたタスクを実行していたので、それはだよう12/21/17

が見えます、それは正常に働いた。どのように私はタスクのために私のアカウントにパスワードを提供する必要はありませんので、 "システム"の下でタスクを実行するこれを得ることができますか?

+1

SYSTEMアカウントは、アクセスしようとしているネットワーク共有にアクセスできないため、ユーザーアカウントは明らかにアクセスします。システムの使用を推奨しません。タスクがローカルリソースにのみアクセスする必要がある場合は、LOCAL SERVICEを使用します。タスクが一般にアクセス可能なネットワークリソースにアクセスする必要がある場合(またはスクリプトまたは設定ファイルに格納されている資格情報を使用する場合)、NETWORK SERVICEを使用します。暗黙的な認証(Windowsが現在のユーザーの資格情報で自動的に認証する)でネットワークリソースにアクセスする必要がある場合は、独自の(または専用の)ユーザーアカウントを使用します。 –

+0

ありがとう@AnsgarWiechers、私はちょうど標準の 'ネット使用'を使用し、システムとして残しました。 – Ilya

答えて

0

@AnsgarWiechersのおかげで、私はちょうどアカウントで標準の「ネット使用」を使用し、タスクスケジューラでシステムとして残しました。そのようにするのを避けようとしていたのですが、それはそれです。

関連する問題