在创建新文件时,我无法确定在代码中正确添加If (!){} else{}
的位置。我希望它附加到.log文件" Log Created"如果为真且"日志失败"什么时候假。我接近这个错吗?
$foo = c:\path\to\folder
$bar_bar = <variable>
New-Item -path "$foo" -name "$bar_bar-test_archive.log" -type "file" -value "`n`r$(get-date -f yyyy-MM-dd.HH:mm:ss) : Process started.`n"
SIDENOTE:我必须命名我的文件"$bar_bar-test_archive.log"
,但我更喜欢将其命名为"$bar_bar_test_archive.log"
,但是由于变量名称中的下划线和变量之间的下划线和常量混淆了它。有没有办法做到这一点?
感谢。
答案 0 :(得分:1)
SIDENOTE:我必须将我的文件命名为“$ bar_bar-test_archive.log”但我 我更喜欢将它命名为“$ bar_bar_test_archive.log”,但是因为 变量名称中的下划线添加和下划线之间 变量和常数会混淆它。有没有办法做到这一点?
您可以通过以下任一方式解决此问题:
-name "$bar_bar`_test_archive.log"
-name "$($bar_bar)_test_archive.log"
至于记录是否有效,如果不正确则使用try / catch构造,这是一种捕获错误的方法。例如,
$LogFile = 'C:\PSTest\log.log'
try
{
Some-Action
}
catch
{
'Failed to run Some-Action' | Out-File $LogFile -Append
}
在捕获内部,您通常还会添加一个Break或Continue,如下所示:
$LogFile = 'C:\PSTest\log.log'
try
{
Some-Action
}
catch
{
'Failed to run Some-Action' | Out-File $LogFile -Append
break # Exit Script
}
'Successfully ran Some-Action' | Out-File $LogFile -Append # The script will only get here if there's no error as an error will trigger the break.
你最终得到这样的东西:
$foo = 'c:\PSTest'
$bar_bar = 'Test'
$LogFile = 'C:\PSTest\log.log'
try
{
New-Item -path "$foo" -name "$bar_bar`_test_archive.log" -type "file" -value "`n`r$(get-date -f yyyy-MM-dd.HH:mm:ss) : Process started.`n" -ErrorAction Stop
}
catch
{
"$(Get-Date -Format G) - Log Failed" | Out-File $LogFile -Append
break
}
"$(Get-Date -Format G) - Log Succeeded" | Out-File $LogFile -Append
一些补充说明:
使用比“Foo”和“Bar”更多的描述性变量名称。它使代码更具可读性,脚本获得的时间越长,就越容易忘记在命名不佳时变量包含的内容。
您的变量值周围缺少引号。字符串使用''
您会注意到我在New-Item命令中添加了-ErrorAction Stop
;允许捕获正常运行。
答案 1 :(得分:1)
如果您不想使用omniomi正在使用的try
/ catch
,这可能更合适,您可以使用Test-Path
:
$foo = c:\path\to\folder
$bar_bar = <variable>
New-Item -path "$foo" -name "$bar_bar-test_archive.log" -type "file" -value "`n`r$(get-date -f yyyy-MM-dd.HH:mm:ss) : Process started.`n"
If (!(Test-Path $foo)){} else{}
对SideNote的回答:
您可以使用$()
在引号内进行评估,如下所示:"$($bar)_bar_test_archive.log"