파워셸에서 sqlcmd를 실행하는 방법?
powershell에 native sqlcmd 명령어가 포함된 문자열이 있습니다.명령 자체는 cmd.exe에서 성공적으로 실행될 수 있습니다.저는 그들을 파워셸에서 실행하는 데 어려움이 있습니다.누가 도와줄 수 있습니까?감사해요.
이것은 sql.sql 입니다.
select @@servername
go
select @@servicename
cmd.exe에서 sqlcmd 명령을 실행할 때의 결과입니다.
C:\Users\test>sqlcmd -S "(local)\instance1" -U a -P a -i "c:\temp\sql.sql"
--------------------------------------------------
thesimpsons\INSTANCE1
(1 rows affected)
--------------------------------------------------
INSTANCE1
(1 rows affected)
C:\Users\test>
이것은 sqlcmd 명령을 호출하는 파워셸 스크립트입니다.
$sql = @"
sqlcmd -S "(local)\instance1" -U a -P a -i "c:\temp\sql.sql"
"@
Invoke-Command $sql
이 powershell 스크립트를 실행하면 다음과 같은 오류가 발생합니다.
PS C:\TEMP> $sql = @"
sqlcmd -S "(local)\instance1" -U a -P a -i "c:\temp\sql.sql"
"@
Invoke-Command $sql
Invoke-Command : Parameter set cannot be resolved using the specified named parame
ters.
At line:5 char:15
+ Invoke-Command <<<< $sql
+ CategoryInfo : InvalidArgument: (:) [Invoke-Command], ParameterBin
dingException
+ FullyQualifiedErrorId : AmbiguousParameterSet,Microsoft.PowerShell.Commands
.InvokeCommandCommand
호출 연산자를 사용할 Win32 실행 파일을 호출하려면 다음과 같이 하십시오.&
다음과 같이:
& sqlcmd -S "(local)\instance1" -U a -P a -i "c:\temp\sql.sql"
외부 'SQLCMD' 사용을 중지할 수도 있습니다.EXE'와 Invoke-Sqlcmd cmdlet을 대신 사용합니다.
Invoke-Sqlcmd는 언어(Transact-Sql 및 XQuery)의 문과 sqlcmd 유틸리티에서 지원되는 명령이 포함된 스크립트를 실행하는 SQL Server cmdlet입니다.
sqlps' 유틸리티를 열고 실행하기만 하면 됩니다.
Invoke-Sqlcmd -InputFile "C:\temp\sql.sql"
SQL Server PowerShell 실행을 참조하십시오.
Invoke-Sqlcmd'를 사용하기 전에 PowerShell에서 SQL Server 스냅인을 수동으로 로드할 수도 있습니다.
MS SQL Server 2012의 경우 를 실행하여 이를 수행할 수 있습니다.
Import-Module SqlPs
이렇게 해서 스크립트에 외부 명령어를 작성합니다.
$scriptblock = {fullpath\sqlcmd -S `"(local)\instance1`" <# comment option -S #>`
-U a `
-P a `
-i `"c:\temp\sql.sql`" }
Invoke-Command -ScriptBlock $scriptBlock
그런 다음 $args 변수를 내부에 사용하고 원격으로 시작할 수도 있습니다.
$scriptblock = {fullpath\sqlcmd -S `"(local)\instance1`" <# comment option -S #>`
-U a `
-P a `
-i `"$($args[0])`" }
Invoke-Command -ScriptBlock $scriptBlock -argumentList "c:\temp\sql.sql" -computer "remote1"
비고:
이렇게 하면 각 파라미터에 주석을 달 수 있습니다.
줄 끝에 있는 자리 뒤에 'ㄱ'자와 공백이 없는 것을 잊지 않도록 주의해야 합니다.
사용하다Invoke-Expression
보다는Invoke-Command
invoke-command의 첫 번째 위치 매개 변수는 -scriptblock이며 스크립트 블록 인수를 예상합니다.here-string을 이용하여 명령을 작성한 다음 invoke-command로 실행하려면 here-string을 스크립트 블록으로 변환해야 합니다.
$sql = @"
sqlcmd -S "(local)\instance1" -U a -P a -i "c:\temp\sql.sql"
"@
Invoke-Command ([scriptblock]::create($sql))
인스턴스 이름과 사용자 이름은 모두 정규화되어야 합니다.
<domain_name>\Instanc_name
그리고.<domai_name>\Username
. 인스턴스 이름만 올바르게 스크립트로 작성되었습니다.
powershell 스크립트 내에서 &operator를 사용하여 sqlcmd를 사용할 때는 샘플을 참조하여 csv 파일을 생성할 수 있습니다.
& cmd /c "sqlcmd -S $sv -i $PROcFILE -s, -v varDB = $dbclean -o $filename"
$sv
서버 이름은 다음과 같습니다.SERVERNAME\INSTANCE
$PROCFILE
마치d:\TSTSQL\Sqlquery.SQL
$filename
가d:\TSTSQL\Desiredoutfilename.CSV
$dbclean
는 sql 파일에 전달된 매개 변수입니다.
언급URL : https://stackoverflow.com/questions/9714054/how-to-execute-sqlcmd-from-powershell
'source' 카테고리의 다른 글
자바스크립트에서 이진수를 나타내는 "0b" 등이 있습니까? (0) | 2023.10.09 |
---|---|
검색되지 않은 예외: Ajax Process의 메모리 부족 (0) | 2023.10.09 |
각도 2 - 외부 URL로 리디렉션하고 새 탭에서 엽니다. (0) | 2023.10.09 |
자바스크립트 / jQuery:윈도우에 포커스가 있는지 테스트 (0) | 2023.10.09 |
xml에서 CDATA end 토큰을 피할 수 있는 방법이 있습니까? (0) | 2023.10.09 |