2

私はPowershellを初めて使用し、次のようなスクリプトを作成しようとしています:

  1. 請求書番号の入力を求めるプロンプト
  2. 請求書の日、月、年のプロンプト
  3. 2 のいずれかの値が null の場合、その値に対してスクリプトが実行された日の値が使用されます。
  4. その情報と請求書番号を含むいくつかの区切り文字をファイル名に連結し、特定のファイルの名前を変更します (この場合は「test.txt」)。
  5. ファイル名を示す簡単な 1 行のレポートを作成します。

私は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、およびが表示$InvYearされ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 に答える