programing

PowerShell의 함수에 해시 테이블을 전달하는 방법은 무엇입니까?

padding 2023. 8. 1. 20:20
반응형

PowerShell의 함수에 해시 테이블을 전달하는 방법은 무엇입니까?

해시 테이블을 내 PowerShell 함수에 전달할 때 개체를 수신한다고 불평합니다.

Function ExtendHash(){
  param(
    [hashtable] $source,
    [hashtable] $extender
  )
  ...
}

그리고 전화를 건 사람은:

$hash1 = @{One = 1; Two = 2}
$hash2 = @{Two = 22; three = 3}
ExtendHash($hash1, $hash2)

시스템을 변환할 수 없습니다.System 유형의 Object[] 값입니다.시스템을 입력할 개체[]입니다.수집.해시 테이블

그럼 어떻게 하면 될까요?제안?

또한, 기본 제공되는 것이 누락되었습니까?JavaScript에서 기본 옵션을 확장할 때 사용하는 패턴(기본값 병합 및 재정의)과 동일한 패턴을 원합니다.

괄호와 쉼표를 사용하지 마십시오.이것은 PowerShell입니다(예: 인수는 CMD의 명령 인수와 유사함).즉, 다음과 같이 함수를 호출합니다.

ExtendHash $hash1 $hash2

당신의 경우 표현식에서($hash1,$hash2)는 두 항목의 배열이며 이 배열, 즉 하나의 인수를 함수에 전달합니다.이러한 호출은 올바르게 실패합니다.


사용하는 경우Set-StrictMode -Version 2PowerShell은 이 "일반적인" 실수를 발견했습니다.

함수 또는 명령이 메서드인 것처럼 호출되었습니다.매개 변수는 공백으로 구분해야 합니다.매개 변수에 대한 자세한 내용은 about_Parameters 도움말 항목을 참조하십시오.

(로맨의 대답 옆에:)
호출자는 해시 테이블을 변수에 저장할 필요가 없으며 다음을 사용할 수도 있습니다.

ExtendHash  -source @{One = 1; Two = 2}  -extender @{Two = 22; three = 3}

(-source그리고.-extender해시 테이블 자체가 에 대해 arg-value-detected로 해석되지 않도록 하기 위해 필요합니다.ExtendHash)

언급URL : https://stackoverflow.com/questions/12931043/how-do-you-pass-a-hash-table-to-a-function-in-powershell

반응형