[英]XML data coming in newline using invoke-sql command in powershell
[英]Powershell Script using Invoke-SQL command,needed for SQL job, the SQL Server version of Powershell is somewhat crippled, is there a workaround?
Full Question: Have Powershell Script using Invoke SQL command, using snappins, I need them to be included in a SQL job, the SQL Server version of Powershell is somewhat crippled, does anyone know a workaround?
根據我收集到的信息,SQL Management Studio 版本的 powershell 功能不足,不允許使用 snappin,因此它無法識別我在腳本中使用的 cmdlet。 我嘗試在作業中將其作為命令行提示符而不是 Powershell 腳本運行,這會導致代碼在一定程度上起作用,但是我檢查了作業的歷史記錄,它說 invoke-sql 仍然不是可識別的 cmdlet。 我推測,因為我在遠程服務器上運行代碼,使用的憑據與我的標准不同,我的預加載 snappin 的配置文件沒有被加載,盡管這有點令人懷疑。
另外,由於我是 powershell 菜鳥,任何關於更好的編碼實踐/簡化我的代碼的建議將不勝感激!
代碼如下:
# define parameters
param
(
$file = "\\server\folder\file.ps1"
)
"invoke-sqlcmd -query """ | out-file "\\server\folder\file.ps1"
# retrieve set of table objects
$path = invoke-sqlcmd -query "select TableName from table WITH (NoLock)" -database db -server server
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")
$so = New-Object Microsoft.SqlServer.Management.Smo.ScriptingOptions
$so.DriPrimaryKey = $false
$so.Nocollation = $true
$so.IncludeIfNotExists = $true
$so.NoIdentities = $true
$so.AnsiPadding = $false
# script each table
foreach ($table in $path)
{
#$holder = $table
$table = get-item sqlserver:\sql\server\default\databases\database\tables\dbo.$($table.TableName)
$table.script($so) | out-file -append $file
}
(get-content "\\server\folder\file.ps1") -notmatch "ANSI_NULLS" | out-file "\\server\folder\file.ps1"
(get-content "\\server\folder\file.ps1") -notmatch " AS "| out-file "\\server\folder\file.ps1"
(get-content "\\server\folder\file.ps1") -notmatch "Quoted_" | out-file "\\server\folder\file.ps1"
(get-content "\\server\folder\file.ps1") -replace "\) ON \[PRIMARY\].*", ")" | out-file "\\server\folder\file.ps1"
(get-content "\\server\folder\file.ps1") -replace "\[text\]", "[nvarchar](max)" | out-file "\\server\folder\file.ps1"
(get-content "\\server\folder\file.ps1") -replace " SPARSE ", "" | out-file "\\server\folder\file.ps1"
(get-content "\\server\folder\file.ps1") -replace "COLUMN_SET FOR ALL_SPARSE_COLUMNS", "" | out-file "\\server\folder\file.ps1"
""" -database database -server server" | out-file "\\server\folder\file.ps1" -append
所以我想出了我自己問題的答案。 使用本網站: http://www.mssqltips.com/tip.asp?tip=1684和http://www.mssqltips.com/tip.asp?tip=1199
我發現他可以使用 SQL 服務器代理代理來做到這一點,所以我沿着黃磚路走,基本上我為我的帳戶設置了一個代理,並且能夠通過一個功能使用外部 powershell。 請注意,您需要在 object 資源管理器的“證券”選項卡下創建一個憑證,然后才能在創建代理時使用 select 一個。 基本上,我最終使用 powershell 子系統創建了一個名為 powershell 的代理,並使用我的登錄信息來創建憑據。 瞧!
您必須每次都添加管理單元。 在您的編輯器中,您可能已經從另一個腳本/選項卡/會話中加載了它們。 在 SQL 服務器中,您需要在腳本的開頭添加如下內容:
IF ( (Get-PSSnapin -Name sqlserverprovidersnapin100 -ErrorAction SilentlyContinue) -eq $null )
{
Add-PsSnapin sqlserverprovidersnapin100
}
IF ( (Get-PSSnapin -Name sqlservercmdletsnapin100 -ErrorAction SilentlyContinue) -eq $null )
{
Add-PsSnapin sqlservercmdletsnapin100
}
我不確定您要解決的錯誤-您可以發布嗎?
您是否從 PowerShell 提示符嘗試過這個?
添加-PSSnapin SqlServerCmdletSnapin100
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.