خطای «مسیر نسبی پشتیبانی نمیشود» معمولاً در PowerShell DSC زمانی رخ میدهد که فایلی را از آنلاین یا وبسایت دانلود میکنیم و برای آن از «File» DscResource استفاده میکنیم.
در مثال زیر، ما در حال دانلود نسخه PowerShell 7.1.4 از GitHub با استفاده از DSC به رایانه محلی هستیم و با خطای زیر مواجه می شویم.
مثال
Configuration FileCopy{ Node LocalHost{ File CopyFromBlob{ SourcePath = "https://github.com/PowerShell/PowerShell/releases/download/v7.1.4/PowerShell-7.1.4-win-x86.msi" DestinationPath = "C:Temp" Ensure = 'Present' } } } FileCopy -OutputPath C:TempdscFileCopy Start-DscConfiguration -Path C:TempdscFileCopy -Wait -Force
خروجی
Relative path is not supported. The related file/directory is: https://github.com/PowerShell/PowerShell/releases/download/v7.1. 4/PowerShell-7.1.4-win-x86.msi. + CategoryInfo : InvalidArgument: (:) [], CimException + FullyQualifiedErrorId : MI RESULT 4 + PSComputerName : LocalHost
برای رفع این خطا، میتوانیم از منبع DSC “Script” استفاده کنیم یا باید منبع DSC اضافی “xRemoteFile” را دانلود و نصب کنیم تا فایل را آنلاین دانلود کنیم.
برای نصب منبع “xRemoteFile” از دستور زیر استفاده کنید.
Find-DscResource xRemoteFile | Install-Module -Force -Verbose
پس از نصب دستور می توانیم از تنظیمات زیر استفاده کنیم.
Configuration FileCopy{ Import-DscResource -ModuleName xPSDesiredStateConfiguration Node LocalHost{ xRemoteFile FileDownload{ URI = "https://github.com/PowerShell/PowerShell/releases/download/v7.1.4/PowerShell-7.1.4-win-x86.msi" DestinationPath = "C:TempPowerShell-7.1.4-win-x86.msi" } } } FileCopy -OutputPath C:TempdscFileCopy Start-DscConfiguration -Path C:TempdscFileCopy -Wait -Force
همانطور که در زیر نشان داده شده است می توانید از منبع داخلی Script DSC نیز استفاده کنید.
[/membership]Configuration FileCopy{ Node LocalHost{ Script DownloadFile{ GetScript = {""} SetScript = { Invoke-WebRequest - Uri "https://github.com/PowerShell/PowerShell/releases/download/v7.1.4/PowerShell-7.1.4-win-x86.msi" -OutFile C:TempPowerShell-7.1.4-win-x86.msi } TestScript = { If(!(Test-Path C:TempPowerShell-7.1.4-win-x86.msi)){return $false} else{return $true} } } } }>