Powershell Scipt仅在ISE中运行

时间:2017-04-12 19:00:47

标签: powershell filesystemwatcher sta

我已经对这个问题进行了相当多的研究,并发现了其他类似问题,但没有适用于我们的修复方法。

我们已经构建了一个电源shell脚本来监视新图像的文件夹,使用exiftool检查它们的颜色配置文件,并在需要时使用图像magick进行转换。当脚本在ISE中运行时,所有这些功能都可以正常运行,但如果脚本是从.exe执行或手动运行的话,则无效。

我已经读过FileSystemWatcher要求脚本在STA中运行,我试图通过在.exe快捷方式的目标中包含-STA来做几次。这样做证明是不成功的。

#----------------------------------------------------------------------------

Unregister-Event -SourceIdentifier FileCreated

Clear

#----------------------------------------------------------------------------

$description = Get-WmiObject -Class Win32_OperatingSystem |Select Description
$description = $description -Replace "@{Description=",""
$description = $description -Replace "}",""

$assetsFolder = "E:\" + $description + "\Capture One Session\Output"
$conversionStage = "C:\Profile_Pro\conversionStage"

#----------------------------------------------------------------------------

New-Item -ItemType directory -Force -Path "$assetsFolder" | Out-Null
New-Item -ItemType directory -Force -Path "$assetsFolder" | Out-Null

#----------------------------------------------------------------------------

$filter = "*.*"

$srgb = "sRGB IEC61966-2.1"

$isTif = "tif"

#----------------------------------------------------------------------------

$monitor = New-Object IO.FileSystemWatcher $assetsFolder, $filter -Property @{
IncludeSubdirectories = $true
NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
}

#----------------------------------------------------------------------------

$onCreated = Register-ObjectEvent $monitor Created -SourceIdentifier FileCreated -Action {

#----------------------------------------------------------------------------

    Add-Type -AssemblyName System.Windows.Forms

#----------------------------------------------------------------------------

    $path = $event.SourceEventArgs.FullPath
    $name = $event.SourceEventArgs.Name

    Write-Host $path
    Write-Host $name

    If ($name -Match $isTif)
        {
        $BOX = [System.Windows.Forms.MessageBox]::Show('TIFF FILE DETECTED. PLEASE CHECK RECIPE.', 'Warning', 'ok', 'Warning')

        $path = $path -Replace ".tif.tmp",".tif"

        Start-Sleep -s 2

        Remove-Item "$path" -Force
        }
    Else
        {
        $colorSpace = C:\Profile_Pro\tools\exiftool.exe -T -ProfileDescription $path
        $profileConvert = 'C:\Profile_Pro\tools\sRGB_Color_Space_Profile.icm'

        If ($colorSpace -Match $srgb) 
            {
            }
        Else
            {
            Start-Sleep -s 3

            $name = $name -Replace ".jpg.tmp",".jpg"
            $path = $path -Replace ".jpg.tmp",".jpg"

            Move-Item -Path $path -Destination $conversionStage -Force

            convert $conversionStage\$name -profile $profileConvert $path

            Start-Sleep -s 1

            Remove-Item "$conversionStage\$name" -Force

#----------------------------------------------------------------------------

            $BOX = [System.Windows.Forms.MessageBox]::Show('COLOR PROFILE ERROR. PLEASE CHECK RECIPE.', 'Warning', 'ok', 'Warning')

#----------------------------------------------------------------------------

            $TO = $env:USERNAME + "@biz.com"

            $Outlook = New-Object -ComObject Outlook.Application
            $Mail = $Outlook.CreateItem(0)
            $Mail.To = $TO
            $Mail.Subject = "COLOR PROFILE DEFECT: " + $name
            $Mail.importance = 2
            $Mail.Body = "A COLOR PROFILE DEFECT HAS BEEN DETECTED WITH FILE:`r`n`r`n$name`r`n`r`nTHIS FILE IS FIXED.`r`n`r`nPLEASE CHECK YOUR PROCESS RECIPE."
            $Mail.Send()
            }
        }
    }

#----------------------------------------------------------------------------

#Unregister-Event -SourceIdentifier FileCreated

#----------------------------------------------------------------------------

任何让这个脚本作为.exe运行或在ISE之外运行的想法都将不胜感激。

0 个答案:

没有答案