我一直在研究 PowerShell,并且我一直(慢慢地)将它融入到我的日常 DBA 任务中。
到目前为止,我已经看到了许多用于许多不同管理活动的断开连接的 PowerShell 脚本。
我想知道的是,是否有官方(或可识别的)PowerShell 脚本集合或存储库,人们通常会使用这些集合或存储库来获取用于常见 DBA 活动的 SQL Server PowerShell 脚本(例如 Ola Hallengren 的 T-SQL 脚本)。
我有足够的 PowerShell 技能来开始工作,但没有使用 SQL 服务器。有人可以指出我如何使用 PowerShell 获取有关远程 SQL 服务器的信息以识别其上运行的数据库的正确方向。
谢谢你的帮助。
编辑 - 使用 SMO 代码
我试图将这段代码放在一起,但得到错误:找不到类型 [Microsoft.SqlServer.Management.Smo.Server] 确保加载了包含此类型的程序集
[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")
$sqlServer = New-Object("Microsoft.SqlServer.Management.Smo.Server") "MSQLULTDBS04"
foreach($sqlDatabase in $sqlServer.databases) {$sqlDatabase.name}
Run Code Online (Sandbox Code Playgroud) 我有一些 SQL Server 机器无法连接到任何外部站点。
我在管理数据库时越来越多地使用 PowerShell,所以我肯定需要安装这个模块,以便我可以使用我的 PowerShell 例程。
事实证明,在这些离线机器上安装 SQL Server 模块很困难。
当我尝试安装模块时:
该SqlServer模块要求提供NuGet 模块包:
然后我得到了这片红色字母的海洋和以下错误消息,如下图所示:
警告:无法从 URI“ https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409 ”下载到“”。
警告:无法下载可用提供程序的列表。检查您的互联网连接。PackageManagement\Get-PackageProvider:无法找到包提供程序“NuGet”。
它可能尚未导入。尝试“Get-PackageProvider -ListAvailable”。
在 C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:7415 char:30 + ... tProvider = PackageManagement\Get-PackageProvider -Name $script:NuGet ...
此 PowerShell 模块安装的解决方法是什么?
我们可以通过 T-SQL 脚本或 PowerShell/cmd 启用/禁用 SQL 服务器代理服务吗?
Kenneth Fisher 发表了一篇关于如何确定我的 SSIS 包是什么 SQL 版本的博客文章?2015 年 4 月。
它有一个表,其中列出了哪些 SQL 版本映射到PackageFormatVersion在 XML 元数据中找到的 SSIS 包。这在查看 1 个单独的包时很有用。
我有一个包含大约 100 个 SSIS.DTSX包的文件夹,我需要知道它们都是哪个 SQL 版本。
如何批量确定文件夹(文件系统)中PackageFormatVersion多个.DTSX包的(即 SQL 版本)是什么?
最终目标是确定哪个是正确的 TFS 版本来获取和实施以将这些包放入,因为当前不存在源代码控制系统。Kenneth 提供的表将帮助我回答这个问题,但首先我需要确认包 SQL 版本是什么。
假设我没有安装 BIDS 或 SSDT。
假设所需的输出是这样的,其中管道指定了一个新列:
PackageFilename | PackageFormatVersion
--------------------------------------
Package1.dtsx | 3
Package2.dtsx | 4
Run Code Online (Sandbox Code Playgroud)
欢迎使用 PowerShell、TSQL、可以抓取目录结构的 3rd 方工具或其他工具。
我有一个带有 SSMS 17 的 Windows 10 盒子。我安装了 SSMS 2016,但现在已卸载。当我去安装 SqlServer 模块时,我收到此警告:
C:\WINDOWS\system32> install-module sqlserver -Scope AllUsers
Untrusted repository
You are installing the modules from an untrusted repository. If you trust this repository, change its InstallationPolicy
value by running the Set-PSRepository cmdlet. Are you sure you want to install the modules from 'PSGallery'?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"): y
PackageManagement\Install-Package : The following commands are already available …Run Code Online (Sandbox Code Playgroud) 我正在尝试设置订阅者对 SQL Server 发布的推送订阅。
我可以使用 Management Studio 中的复制向导在发布者处设置订阅。但是,我更愿意编写相对于订阅者的流程脚本,以便我可以自动部署新的 SQL Server 订阅者实例。
最初,我很乐意在部署前提示输入发布者的名称。如果我可以让它工作,我会寻找一种方法来自动为我的环境注入正确的值。
对于必须在不同发布者上创建多个订阅的 SQL Server 实例,执行此操作的简单方法是什么?
我愿意使用任何受支持的 SQL Server 脚本解决方案:SMO、RMO、Sqlcmd、WMI、PSDrive,甚至是纯 T-SQL。
我试图通过两种方式解决这个问题。第一个是使用 T-SQL 的完整解决方案,但它涉及一些手动步骤。
我在 T-SQL 中有一个手动解决方案。该解决方案基于 Management Studio Replication Script Generator 输出的输出。
使用 Management Studio,我运行以下脚本以生成可在发布者处运行的 T-SQL 脚本:
PRINT N'
EXECUTE MyDatabase.dbo.sp_addsubscription
@publication = N''MyPublication'',
@subscriber = ''' + CAST(SERVERPROPERTY('ServerName') AS SYSNAME) + ''',
@destination_db = ''SubscriberDatabase'',
@subscription_type = N''Push'',
@sync_type = N''automatic'',
@article = N''all'',
@update_mode = N''read only'',
@subscriber_type = 0;
EXECUTE MyDatabase.dbo.sp_addpushsubscription_agent
@publication …Run Code Online (Sandbox Code Playgroud) 在 2014 年使用我的 AD 帐户通过凭据从 SQL Server 代理运行 powershell 脚本。我收到以下错误。
作业步骤在 PowerShell 脚本的第 1 行收到错误。相应的行是“set-executionpolicy RemoteSigned -scope process -Force”。更正脚本并重新安排作业。PowerShell 返回的错误信息是:'Security error.
我在谷歌上搜索,没有发现任何有用的东西。我可以在我的工作站上通过 SSMS 从 Powershell 控制台运行脚本,没有任何问题。
执行策略设置为不受限制
PS C:\WINDOWS\system32> Get-ExecutionPolicy
Unrestricted
Run Code Online (Sandbox Code Playgroud)
错误输出中提到的行必须由 SQL Server 自动添加,因为RemoteSigned -scope process -Force它不在代码中的任何位置。
除了使用 AD 帐户运行作业之外,我还需要在 SQL Server 代理中设置什么吗?
这是来自的powershell行 msdb.dbo.syssubsystems
C:\Program Files (x86)\Microsoft SQL Server\120\Tools\Binn\SQLPS.exe
更新
这是版本
PS SQLSERVER:\SQL\CD000023\CEF_2014_1> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
2 0 -1 -1
Run Code Online (Sandbox Code Playgroud)
更新 01/03/2015
此脚本基于中央管理服务器的注册服务器创建表 serverlist。然后它连接到这些服务器中的每一个并识别其侦听的端口。
# connection parameters
Param (
[string] …Run Code Online (Sandbox Code Playgroud) sql-server permissions powershell sql-server-agent sql-server-2014
我对 PowerShell 很陌生,现在我找到了 dbatools.io,我想在其中运行 SQL 代理中的 PowerShell 任务,例如
$ExportPath = $env:TEMP + '\DriveSpace.csv'
$datatable = Import-Csv $ExportPath | Out-DbaDataTable
Write-DbaDataTable -SqlServer MyServer -Database Utils -InputObject $datatable -Table dbo.FreeSpaceOnDiskDrive -AutoCreateTable
Run Code Online (Sandbox Code Playgroud)
它开始了,但它永远不会结束。我也尝试过执行此操作的任务:
Get-DbaDatabaseSpace -SqlServer MyServer -IncludeSystemDBs | Out-DbaDataTable | Write-DbaDataTable -SqlServer MyServer -database utils -Table dbo.DiskSpaceExample -AutoCreateTable
Run Code Online (Sandbox Code Playgroud)
同样的问题。它在 Windows PowerShell ISE 中运行正常,但只是在 SQL 代理中挂起。所以现在它为我创建了一个新表,并用数据填充它,但工作只是继续运行。
当 SQL Server 服务启动时,我需要在我的服务器上的 IIS 中回收一个 AppPool。
我采取的路线是有一个启动存储过程,它运行具有 Powershell 作业步骤的代理作业。
我已经从互联网上创建/抓取了一个 Powershell 脚本来回收应用程序池:
# Load IIS module:
Import-Module WebAdministration
# Set a name of the site we want to recycle the pool for:
$site = "Default Web Site"
# Get pool name by the site name:
$pool = (Get-Item "IIS:\Sites\$site"| Select-Object applicationPool).applicationPool
# Recycle the application pool:
Restart-WebAppPool $pool
Run Code Online (Sandbox Code Playgroud)
这适用于操作系统级别,但仅当 Powershell 以管理员身份运行时才有效(即使我在 Admin 组中登录到 Windows 的帐户也是如此)
果然,如果我使用包含上述代码的 Powershell 步骤在代理中创建作业,则在执行时会出现错误
作业步骤在 PowerShell 脚本的第 6 行收到错误。对应的行是'$pool = (Get-Item "IIS:\Sites\$site"| Select-Object applicationPool).applicationPool'。更正脚本并重新安排作业。PowerShell 返回的错误信息是:'无法检索 …
powershell ×10
sql-server ×9
automation ×1
dbatools ×1
installation ×1
management ×1
patching ×1
permissions ×1
replication ×1
scripting ×1
ssis ×1
t-sql ×1
xml ×1