2

我是 Powershell 的新手,正在尝试编写一个脚本:

  1. 提示输入发票编号
  2. 提示日期,然后是月份,然后是发票的年份
  3. 如果 2 中的任何值为 null,则它使用脚本运行当天的值来获取该值。
  4. 将该信息与一些分隔符与发票编号连接成一个文件名并重命名给定文件(在本例中为“test.txt”)
  5. 创建指示文件名的快速单行报告。

我被困在 2 和 3 上。我正在这样做:

$InvoiceNumber = read-host "Enter test invoice number: "
$InvDay = $(Read-Host "Enter day of month: "
if ($InvDay){""} Else {Get-Date -format dd})
$InvMonth = $(Read-Host "Enter Month of Year: "
if ($InvMonth){""} Else {Get-Date -format MM})
$InvYear = $(Read-Host "Enter day of month: "
if ($InvYear){""} Else {Get-Date -format yy})

$InvDate = "$InvMonth + "-" + $InvDay + "-" + $InvYear"
Write-Host "InvDate is $InvDate"`

但输出显示$InvMonth,$InvDay$InvYearas System.Object[]。我如何正确地将这些类型转换为可用?我已经搜索了几个小时,但没有找到有效的答案。

4

2 回答 2

1

正如我所指出的,您发布的代码存在很多语法问题。这是清理语法并按照我认为您希望的方式运行的代码:

$InvoiceNumber = read-host "Enter test invoice number"
$InvDay = $(Read-Host "Enter day of month")
if ($InvDay -eq ''){$InvDay = Get-Date -format dd}
$InvMonth = $(Read-Host "Enter Month of Year")
if ($InvMonth -eq ""){$InvMonth = Get-Date -format MM}
$InvYear = $(Read-Host "Enter Year")
if ($InvYear -eq "") {$InvYear = Get-Date -format yy}

$InvDate = $InvMonth + "-" + $InvDay + "-" + $InvYear
Write-Host "InvDate is $InvDate"
于 2012-06-19T18:18:24.627 回答
0

试一试,对于日期和月份,它会提示直到它获得有效值:

$InvoiceNumber = read-host "Enter test invoice number"

do {[int]$InvDay = Read-Host "Enter day of month (1-31)"}
while ((1..31) -notcontains $InvDay)

do {[int]$InvMonth = Read-Host "Enter Month of month (1-12)"}
while ((1..12) -notcontains $InvMonth)

[int]$InvYear = Read-Host "Enter Year"
if (!$InvYear) {$InvYear = Get-Date -format yy}

$InvDate = $InvMonth,$InvDay,$InvYear -join '-'
Write-Host "InvDate is $InvDate"
于 2012-06-19T18:32:46.617 回答