콘텐츠를 포함하는 파일 만들기
설명
이 예제에서는 리소스를 Script
사용하여 파일을 만드는 방법을 보여줍니다.
리소스를 Script
사용하려면 세 개의 코드 블록을 지정해야 합니다. GetScript, TestScript 및 SetScript입니다.
이 예제에서는 사용자 입력의 두 매개 변수를 사용합니다. FilePath 는 파일이 있어야 하는 경로를 설정하고 FileContent 는 파일의 내용을 설정합니다. 이러한 값은 지시문을 사용하여 scriptblocks에서 using
참조됩니다.
GetScript
$fileContent = $null
if (Test-Path -Path $using:FilePath) {
$fileContent = Get-Content -Path $using:filePath -Raw
}
return @{
Result = $fileContent
}
GetScript scriptblock에서 코드는 FilePath에서 지정한 파일이 있는지 확인합니다. 이 경우 scriptblock은 결과에 대한 해당 파일의 현재 콘텐츠를 반환합니다. 그렇지 않으면 scriptblock이 결과에 대해 반환됩니다 $null
.
TestScript
if (Test-Path -Path $using:FilePath) {
$fileContent = Get-Content -Path $using:filePath -Raw
return ($fileContent -eq $using:FileContent)
} else {
return $false
}
TestScript scriptblock에서 코드는 FilePath에서 지정한 파일이 있는지 확인합니다. 그렇지 않으면 scriptblock이 반환됩니다 $false
. 파일이 있는 경우 코드는 파일의 현재 콘텐츠를 FileContent에서 지정한 내용과 비교합니다. 내용이 일치하면 scriptblock이 반환됩니다 $true
. 그렇지 않으면 scriptblock이 반환됩니다 $false
.
SetScript
$streamWriter = New-Object -TypeName 'System.IO.StreamWriter' -ArgumentList @(
$using:FilePath
)
$streamWriter.WriteLine($using:FileContent)
$streamWriter.Close()
SetScript scriptblock에서 코드는 FilePath에서 지정한 파일에 쓸 System.IO.StreamWriter 개체를 만듭니다. FileContent에서 지정한 콘텐츠를 쓴 다음 StreamWriter 개체를 닫습니다.
Invoke-DscResource
이 스크립트는 cmdlet과 함께 리소스를 Script
Invoke-DscResource
사용하여 특정 콘텐츠가 있는 파일이 있는지 확인하는 방법을 보여 줍니다.
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[String]
$FilePath,
[Parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[String]
$FileContent
)
begin {
$SharedParameters = @{
Name = 'Script'
ModuleName = 'PSDscResource'
Properties = @{
SetScript = {
$streamWriter = New-Object -TypeName 'System.IO.StreamWriter' -ArgumentList @(
$using:FilePath
)
$streamWriter.WriteLine($using:FileContent)
$streamWriter.Close()
}
TestScript = {
if (Test-Path -Path $using:FilePath) {
$fileContent = Get-Content -Path $using:filePath -Raw
return ($fileContent -eq $using:FileContent)
} else {
return $false
}
}
GetScript = {
$fileContent = $null
if (Test-Path -Path $using:FilePath) {
$fileContent = Get-Content -Path $using:filePath -Raw
}
return @{
Result = $fileContent
}
}
}
}
}
process {
$TestResult = Invoke-DscResource -Method Test @SharedParameters
if ($TestResult.InDesiredState) {
Invoke-DscResource -Method Get @SharedParameters
} else {
Invoke-DscResource -Method Set @SharedParameters
}
}
구성을 사용하여
이 코드 조각에서는 리소스 블록으로 Configuration
Script
정의하여 특정 콘텐츠가 포함된 파일이 있는지 확인하는 방법을 보여 줍니다.
Configuration ScriptExample {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[String]
$FilePath,
[Parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[String]
$FileContent
)
Import-DscResource -ModuleName 'PSDscResources'
Node localhost {
Script ScriptExample {
SetScript = {
$streamWriter = New-Object -TypeName 'System.IO.StreamWriter' -ArgumentList @(
$using:FilePath
)
$streamWriter.WriteLine($using:FileContent)
$streamWriter.Close()
}
TestScript = {
if (Test-Path -Path $using:FilePath) {
$fileContent = Get-Content -Path $using:filePath -Raw
return ($fileContent -eq $using:FileContent)
} else {
return $false
}
}
GetScript = {
$fileContent = $null
if (Test-Path -Path $using:FilePath) {
$fileContent = Get-Content -Path $using:filePath -Raw
}
return @{
Result = $fileContent
}
}
}
}
}