我尝试在Windows PowerShell上自定义我的配置文件。
在读一本书时,我在Microsoft.Powershell_profile.ps1
中编写了以下代码。
function Prompt
{
$id = 1
$historyItem = Get-History -Count 1
if($historyItem)
{
$id = $historyItem.Id +1
}
Write-Host -ForegroundColor DarkGray "`n[$(Get-Location)]"
Write-Host -NoNewLine "PS:$id > "
$host.UI.RawUI.WindowTitle = "$(Get-Location)"
"`b"
}
我可以理解大多数代码的工作原理,但不了解$id = 1
(第3行)。
为什么需要此代码? $ id是在第7行中定义的,所以这里不需要$id = 1
,对吗?
因此,我尝试执行此代码以及不带$id = 1
代码的代码。对我来说,没有区别。
为什么将$id = 1
添加到此代码中?
答案 0 :(得分:3)
如果未定义$historyItem
,则需要它。编写相同功能的另一种方法,也许这更清楚:
function Prompt
{
$historyItem = Get-History -Count 1
if($historyItem)
{
$id = $historyItem.Id +1
}
else
{
$id = 1
}
Write-Host -ForegroundColor DarkGray "`n[$(Get-Location)]"
Write-Host -NoNewLine "PS:$id > "
$host.UI.RawUI.WindowTitle = "$(Get-Location)"
"`b"
}
答案 1 :(得分:1)
请接受Tomalak的回答。我只想指出,它也可以像这样更简洁地编写:
$id = if($historyItem) { $historyItem.Id +1 } else { 1 }
答案 2 :(得分:1)
不是必需的。您发布的代码需要它,因为它不必要地区分“有历史记录”和“没有历史记录”。如果您删除了$id = 1
行并启动了一个新的PowerShell实例,只要命令历史记录为空,您将有一个空的$id
。
您只需运行即可获得与代码相同的结果
$id = (Get-History -Count 1).Id + 1
因为如果历史记录为空,(Get-History -Count 1).Id
的计算结果为空,那么在进行加法运算时会自动将其强制转换为0。