我正在尝试基于要备份到的服务器名\实例创建一个文件夹,我希望该文件夹创建为服务器名_实例。你能指出我哪里出错了吗,因为它创建为服务器名\实例
IF OBJECT_ID('TempPSCreateFolder') IS NULL
BEGIN
CREATE TABLE [TempPSCreateFolder]
(QueryText nvarchar(max))
END
INSERT INTO [TempPSCreateFolder]
SELECT '$fso = new-object -ComObject scripting.filesystemobject
$fso.CreateFolder("C:\'+ STUFF((SELECT ',' + SUBSTRING(@@SERVERNAME, 1, CASE
WHEN CHARINDEX(',', @@SERVERNAME) > 0 THEN
CHARINDEX(',', @@ServerName)-1
ELSE LEN(@@ServerName)
END)
FOR XML PATH('')), 1, 1, '')+'")'
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE
EXEC xp_cmdshell 'bcp master.dbo.TempPSCreateFolder out
"C:\SQLDBA\CreateFolder.ps1" -c -T -SServer\Instance'
EXEC sp_configure 'xp_cmdshell', 0;
RECONFIGURE
DROP TABLE TempPSCreateFolder
您的脚本似乎过于复杂。根据问题标题格式化文件夹名称所需要做的就是
@@SERVERNAME
用下划线替换反斜杠。不需要表、脚本文件和XML PATH
此任务。PowerShell 还包括一个New-Item
命令来避免对遗留 COM 的需要FileSystemObject
。您也可以
xp_cmdshell
完全避免并仅在服务器上运行独立的 PowerShell 脚本: