星彩彩票app下载查阅Windows服务器安装了那几个

 

为什么这个SQL Server DBA学习PowerShell

近期在负责一个小项目,每月定期将一些Excel报表中的数据导入到SQL Server中,方便公司系统与第三方系统的交互。

如何查看Windows服务器安装了那些SQL Server组件呢? 最近就遇到这样一个需求,需要知道Windows服务器是否安装了Replication组件,那么有几种方法查看Windows服务器安装了哪些SQL Server组件呢?下面总结一下这方面的方法,希望对遇到这样问题的人有所帮助!

原文出自:http://www.simple-talk.com/sql/database-administration/why-this-sql-server-dba-is-learning-powershell/

*适用于: SharePoint Server 2013*

中间服务器将我方客户的服务器和第三方公司的服务器衔接起来,我的任务就是将我方客户的Excel报表数据导入到中间服务器上的SQL Server 2000中。

 

Joe.TJ翻译整理,仅用于传播资讯之目的。

利用使用事件,您可以跟踪用户与您网站上的项目进行交互的方式。项目可以是文档、网站或目录项。当用户与您网站上的项目进行交互时,SharePoint Server 2013 会为此操作生成一个使用事件。例如,如果您要监控用移动电话查看一个目录项的频率,则可以跟踪此活动。

我的处理思路是这样的,由于中间服务器的操作系统是Windows Server 2003,故需要创建一个计划任务,这个计划任务每月定期执行一个PowerShell脚本,执行数据导入等相关操作。

 

SMO是一个对象集合,它允许你自动化任何Microsoft SQL  Server相关的管理任务。同样的,对于不熟悉面向对象编程的DBA来说,最大的障碍就是使用更令人生畏的对象模型。同样的,像WMI一样,您需要知道如何检查一个对象以确定它可用的属性和方法。

本文介绍如何创建自定义使用事件类型,以及如何添加代码以记录自定义使用事件以便它们能够由分析处理组件进行处理。

测试代码下载

1:通过SQL Server Features Discovery Report查看。

在SMO的例子中,您将会再次看被用于执行SMO代码的Foreach循环。所有的例子通过设定一个SMO程序集引用开始。一旦你建立了这个引用,那么脚本便能实例化从这个程序集类中派生的新对象。

您可以使用由使用事件生成的数据来显示建议或您网站上的受欢迎的项目。本文还介绍如何通过更改特定使用事件类型的重要性级别来影响建议的显示方式。有关详细信息,请参阅规划 SharePoint Server 2013 中跨网站发布网站的搜索中的“规划使用率分析、使用事件和建议”。

本系列所有测试脚本均在Windows Server 2008 R2 DataCenter (PowerShell 2.0)

 

浏览SMO类

您可以在“热门程度趋势”报告和“最受欢迎的项目”报告中查看所有使用事件类型的统计信息。有关详细信息,请参阅在 SharePoint Server 2013 中查看使用情况报告。

  • PowerGUI Script Editor Free Edition x64中测试通过。

    在开始菜单找到“SQL Server Installation Center"应用程序打开,然后在Tools下点击Installed SQL Server features discovery report后,就能生成如下Html报告。优点是快速生成详细、全面的报告。简便快捷。如果挂载了安装介质,还可以使用命令“setup.exe /action=RunDiscovery /Quiet”

虽然SMO类在联机丛书中有记录,但是如果你学会获取对象的属性和方法的列表也会很有用。为了浏览SMO类,你需要设定一个引用然后使用。Get-Member(gm) cmdlet会显示该对象的属性和方法。

本文内容:

注:本次在VMWare Workstation 7.1.3(Windows Server 2003 R2 x86)中测试通过。

 

# To examine the SMO Server object in PowerShell:

[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | out-null

$svr = new-object ("Microsoft.SqlServer.Management.Smo.Server") "ServerName"

$svr | get-member
  • 开始之前

  • 创建自定义使用事件类型

  • 记录自定义使用事件

  • 记录默认使用事件

  • 更改使用事件类型的重要性级别

  • 更改使用事件类型的“最近”时间段

  • 启用和禁用匿名用户的使用事件日志记录

转载请注明出处:

 

为了研究不同的对象,相应地改变上述脚本中的第二行和第三行。

开始之前

星彩彩票app下载 1注意:

因为 SharePoint 2013 在 Internet Information Services (IIS) 中作为网站运行,所以管理员和用户依赖于浏览器提供的辅助功能。SharePoint 2013 支持受支持的浏览器的辅助功能。有关详细信息,请参阅以下资源:

  • 规划浏览器支持

  • SharePoint 2013 的辅助功能

  • SharePoint 2013 产品中的辅助功能

  • 键盘快捷方式

  • 触控

 

星彩彩票app下载 2

 

创建自定义使用事件类型

SharePoint 2013 中有三种默认使用事件类型。您可使用 Windows PowerShell 创建最多 12 种自定义使用事件类型。

1、准备工作

 

列出服务器上SysAdmin角色的成员

创建自定义使用事件类型
  1. 确认您具有以下成员身份:

    • SQL Server 实例上的 securityadmin 固定服务器角色。

    • 要更新的所有数据库上的 db_owner 固定数据库角色。

    • 运行 Windows PowerShell cmdlet 的服务器上的 Administrators 组。

    • 添加至少具有以上最小权限的成员。

    管理员可以使用 Add-SPShellAdmin cmdlet 授予使用 SharePoint 2013 cmdlet 的权限。

    星彩彩票app下载 3注意:

    如果您不具有相关权限,请联系您的安装管理员或 SQL Server 管理员来请求权限。有关 Windows PowerShell 权限的其他信息,请参阅 Add-SPShellAdmin。

  2. 启动 SharePoint 2013 Management Shell。

    • 对于 Windows Server 2008 R2:

      • 在“开始”菜单上,单击“所有程序”,单击“Microsoft SharePoint 2013 产品”,然后单击“SharePoint 2013 Management Shell”。
    • 对于 Windows Server 2012:

      • 在“开始”屏幕上,单击“SharePoint 2013 Management Shell”。

        如果“SharePoint 2013 Management Shell”不在“开始”屏幕上:

      • 右键单击“计算机”,单击“所有应用程序”,然后单击“SharePoint 2013 Management Shell”。

    有关如何与 Windows Server 2012 进行交互的详细信息,请参阅Windows Server 2012 中的常见管理任务和导航。

  3. 在 Windows PowerShell 命令提示符处,键入以下命令:

    # To get a site at the root site collection level:
    $Site = Get-SPSite "http://localhost"
    
    # To get a site below the root site collection level:
    $Site = Get-SPSite "http://localhost/sites/<SiteName>"
    
    # To create a custom usage event type:
    $SSP = Get-SPEnterpriseSearchServiceApplicationProxy
    $EventGuid = [Guid]::NewGuid()
    $EventName = "<EventTypeName>"
    $tenantConfig = $SSP.GetAnalyticsTenantConfiguration([Guid]::Empty)
    $newEventType = $tenantConfig.RegisterEventType($EventGuid, $EventName, "")
    $tenantConfig.Update($SSP)
    

    其中:

    • <SiteName> 是要为其创建自定义使用事件的网站的名称。

    • <EventTypeName> 是要创建的新自定义使用事件类型的名称,例如,BuyEventType

    此过程将为使用事件类型创建一个随机 GUID。添加代码时使用此 GUID 可记录自定义使用事件,如记录自定义使用事件中所述。

    星彩彩票app下载 4重要:

    自定义使用事件类型至多可能要等待三个小时才在系统中可用。但是,要加速此过程,您也可以重新启动 SharePoint 定时服务。

星彩彩票app下载 5注意:

我们建议您在执行命令行管理任务时使用 Windows PowerShell。Stsadm 命令行工具已被弃用,仍然包含该工具是为了支持与之前产品版本的兼容性。

为了模拟中间服务器的环境,我准备了一个VMWare的虚拟机,操作系统是Windows Server 2003 R2 x86:

 

依据你前面的经验,搞明白SMO对象模型是如何运作的可能很棘手。我明白基础的面向对象的编程知识,但不是完全理解,直到我执行一个列出服务器上SysAdmin角色成员的脚本时。起初,我尝试使用以下脚本并收到如图所示错误信息。(我在测试时,没有遇到作者所说的错误信息,只是把$svrole当作一个字符串变量输出,没有得预期角色成员的结果。所以这里就直接引用了作者的图。)

记录自定义使用事件

星彩彩票app下载 6

 

# Before I understood the concept of objects completely, I tried…

[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | out-null

$svr="ServerName"

$srv=New-Object "Microsoft.SqlServer.Management.Smo.Server" "$svr"

$svrole = 'sysadmin'

$svrole 

在您创建自定义使用事件类型(如创建自定义使用事件类型中所述)后,您必须将代码添加到事件的发生位置

例如,在加载页面时或在用户单击链接或按钮时。随后,此数据将发送到用于记录和处理它的分析处理组件。

如果您使用的是跨网站发布(这将显示发布网站上的目录内容),则必须在索引项目的 URL 上记录使用事件,并覆盖部分网站设置。例如,如果您的已在发布网站上发布的创作网站中有一个目录,则当用户与发布网站上的目录项交互时,此使用事件必须记录到创作网站中的该项目上。此外,您添加的用于记录使用事件的代码必须覆盖发布网站的 SiteId 和 WebId,并由创作网站的 SiteId 和 WebId 替换。

 

星彩彩票app下载 7

星彩彩票app下载 8

添加用于记录自定义使用事件的代码
  1. 确认您具有以下成员身份:

    • SQL Server 实例上的 securityadmin 固定服务器角色。

    • 要更新的所有数据库上的 db_owner 固定数据库角色。

    • 运行 Windows PowerShell cmdlet 的服务器上的 Administrators 组。

    • 添加至少具有以上最小权限的成员。

    管理员可以使用 Add-SPShellAdmin cmdlet 授予使用 SharePoint 2013 cmdlet 的权限。

    星彩彩票app下载 9注意:

    如果您不具有相关权限,请联系您的安装管理员或 SQL Server 管理员来请求权限。有关 Windows PowerShell 权限的其他信息,请参阅 Add-SPShellAdmin。

  2. 启动 SharePoint 2013 Management Shell。

    • 对于 Windows Server 2008 R2:

      • 在“开始”菜单上,单击“所有程序”,单击“Microsoft SharePoint 2013 产品”,然后单击“SharePoint 2013 Management Shell”。
    • 对于 Windows Server 2012:

      • 在“开始”屏幕上,单击“SharePoint 2013 Management Shell”。

        如果“SharePoint 2013 Management Shell”不在“开始”屏幕上:

      • 右键单击“计算机”,单击“所有应用程序”,然后单击“SharePoint 2013 Management Shell”。

    有关如何与 Windows Server 2012 进行交互的详细信息,请参阅Windows Server 2012 中的常见管理任务和导航。

  3. 在 Windows PowerShell 命令提示符处,键入以下命令:

    # To view GUIDs for all usage event types:
    $SSP = Get-SPEnterpriseSearchServiceApplicationProxy
    $SSP.GetAnalyticsEventTypeDefinitions([Guid]::Empty, 3) | ft
    
  4. 在 HTML 编辑器中,打开应在其中记录自定义使用事件的文件(例如,内容搜索 Web 部件的显示模板),并添加以下代码:

    window.Log<CustomUsageEventType>ToEventStore = function(url)
    {
        ExecuteOrDelayUntilScriptLoaded(function()
        {
            var spClientContext = SP.ClientContext.get_current();
            var eventGuid = new SP.Guid("<GUID>");
            SP.Analytics.AnalyticsUsageEntry.logAnalyticsAppEvent(spClientContext, eventGuid, url);
            spClientContext.executeQueryAsync(null, Function.createDelegate(this, function(sender, e){ alert("Failed to log event for item: "   document.URL   " due to: "   e.get_message()) }));
        }, "SP.js");
    }Where:
    
    • <CustomUsageEventType> 是自定义事件的名称,例如,BuyEventType

    • <GUID> 是使用事件类型的数字 ID - 例如,4e605543-63cf-4b5f-aab6-99a10b8fb257

  5. 在 HTML 编辑器中,打开引用自定义使用事件的文件,并添加以下代码:

    # The example below shows how a custom usage event type is referred to when a button is clicked: 
    <button onclick="Log<CustomUsageEventType>ToEventStore('<URL>')"></button>
    

    其中:

    • <CustomUsageEventType> 是自定义事件类型的名称。

    • <URL> 是应将使用事件记录到的项目的完整 URL,例如,

2、创建任务计划

 

在这一点上我有了小小的顿悟。最终使我理解了面向对象编程的概念和PowerShell中“任何东西都是一个对象”。我成功的创建了一个服务器对象的实例,并从那里,我想要用自己的方式为SysAdmin角色处理服务器角色对象。所以,我设定一个变量$svrole,并赋值‘sysadmin’。

添加用于记录自定义使用事件的代码并覆盖网站设置
  1. 确认您具有以下成员身份:

    • SQL Server 实例上的 securityadmin 固定服务器角色。

    • 要更新的所有数据库上的 db_owner 固定数据库角色。

    • 运行 Windows PowerShell cmdlet 的服务器上的 Administrators 组。

    • 添加至少具有以上最小权限的成员。

    管理员可以使用 Add-SPShellAdmin cmdlet 授予使用 SharePoint 2013 cmdlet 的权限。

    星彩彩票app下载 10注意:

    如果您不具有相关权限,请联系您的安装管理员或 SQL Server 管理员来请求权限。有关 Windows PowerShell 权限的其他信息,请参阅 Add-SPShellAdmin。

  2. 启动 SharePoint 2013 Management Shell。

    • 对于 Windows Server 2008 R2:

      • 在“开始”菜单上,单击“所有程序”,单击“Microsoft SharePoint 2013 产品”,然后单击“SharePoint 2013 Management Shell”。
    • 对于 Windows Server 2012:

      • 在“开始”屏幕上,单击“SharePoint 2013 Management Shell”。

        如果“SharePoint 2013 Management Shell”不在“开始”屏幕上:

      • 右键单击“计算机”,单击“所有应用程序”,然后单击“SharePoint 2013 Management Shell”。

    有关如何与 Windows Server 2012 进行交互的详细信息,请参阅Windows Server 2012 中的常见管理任务和导航。

  3. 在 Windows PowerShell 命令提示符处,键入以下命令:

    # To view GUIDs for all usage event types:
    $SSP = Get-SPEnterpriseSearchServiceApplicationProxy
    $SSP.GetAnalyticsEventTypeDefinitions([Guid]::Empty, 3) | ft
    
  4. 在 HTML 编辑器中,打开应在其中记录自定义使用事件的文件(例如,内容搜索 Web 部件的显示模板)。以下示例显示如何覆盖当前 SiteId、WebId 和 UserId。

    window.Log<CustomUsageEventType>ToEventStore = function(url, siteIdGuid, webIdGuid, spUser)
    {
        ExecuteOrDelayUntilScriptLoaded(function()
        {
          var spClientContext = SP.ClientContext.get_current();
          var eventGuid = new SP.Guid("<GUID>");
    SP.Analytics.AnalyticsUsageEntry.logAnalyticsAppEvent2(spClientContext, eventGuid, url, webIdGuid, siteIdGuid, spUser);
          spClientContext.executeQueryAsync(null, Function.createDelegate(this, function(sender, e){ alert("Failed to log event for item: "   document.URL   " due to: "   e.get_message()) }));
        }, "SP.js");
    }
    

    其中:

    • <CustomUsageEventType> 是自定义事件类型的名称 - 例如,BuyEventType

    • <GUID> 是使用事件类型的数字 ID - 例如,4e605543-63cf-4b5f-aab6-99a10b8fb257

  5. 在 HTML 编辑器中,打开引用自定义使用事件类型的文件,并添加以下代码:

    # The example below shows how a custom usage event type is referred to when the "Buy!" button is clicked:
    <button onclick="Log<CustomUsageEventType>ToEventStore('<URL>', new SP.Guid('{<SiteId GUID>}'), new SP.Guid('{<WebId guid}>'), '<UserName>')">Buy!</button>
    

    其中:

    • <CustomUsageEventType> 是自定义事件类型的名称 - 例如,BuyEventType

    • <URL> 是在托管属性 OriginalPath 中找到的 URL。

    • <SiteId GUID> 是托管属性 SiteID 的 GUID。

    • <WebId GUID> 是托管属性 WebId 的 GUID。

    • <UserName> - 例如,可以是用于标识具有匿名用户的网站上的用户的 Cookie ID。

星彩彩票app下载 11注意:

我们建议您在执行命令行管理任务时使用 Windows PowerShell。Stsadm 命令行工具已被弃用,仍然包含该工具是为了支持与之前产品版本的兼容性。

Windows Server 2003 中有个任务计划功能,可以在设定的时间段执行任务,非常灵活,可以自定义执行的时间、次数、间隔等。

 

然后我尝试调用这个字符串对象的方法,并认为我是在调用服务器角色对象的方法。在这种情况下,变量$svrole只包含字符串对象而不是对服务器角色对象的引用。因此,才会发生上面的错误。

记录默认使用事件

若要添加引用默认使用事件类型(例如,视图)的代码,您必须将代码添加到事件的发生位置。

如果您使用的是跨网站发布(这将显示发布网站上的目录内容),则必须在索引项目的 URL 上记录使用事件,并覆盖部分网站设置。例如,如果您的已在发布网站上发布的创作网站中有一个目录,则当用户与发布网站上的目录项交互时,此使用事件必须记录到创作网站中的该项目上。此外,您添加的用于记录使用事件的代码必须覆盖发布网站的 SiteId 和 WebId,并由创作网站的 SiteId 和 WebId 替换。

可以看到,搜狗拼音已经创建了一个任务计划:

2:从菜单的所有程序进去查看已经安装的组件。

下面的脚本把列出服务器上SysAdmin成员所需的PowerShell代码封装成了一个函数。

添加代码以记录默认使用事件
  1. 确认您具有以下成员身份:

    • SQL Server 实例上的 securityadmin 固定服务器角色。

    • 要更新的所有数据库上的 db_owner 固定数据库角色。

    • 运行 Windows PowerShell cmdlet 的服务器上的 Administrators 组。

    • 添加至少具有以上最小权限的成员。

    管理员可以使用 Add-SPShellAdmin cmdlet 授予使用 SharePoint 2013 cmdlet 的权限。

    星彩彩票app下载 12注意:

    如果您不具有相关权限,请联系您的安装管理员或 SQL Server 管理员来请求权限。有关 Windows PowerShell 权限的其他信息,请参阅 Add-SPShellAdmin。

  2. 启动 SharePoint 2013 Management Shell。

    • 对于 Windows Server 2008 R2:

      • 在“开始”菜单上,单击“所有程序”,单击“Microsoft SharePoint 2013 产品”,然后单击“SharePoint 2013 Management Shell”。
    • 对于 Windows Server 2012:

      • 在“开始”屏幕上,单击“SharePoint 2013 Management Shell”。

        如果“SharePoint 2013 Management Shell”不在“开始”屏幕上:

      • 右键单击“计算机”,单击“所有应用程序”,然后单击“SharePoint 2013 Management Shell”。

    有关如何与 Windows Server 2012 进行交互的详细信息,请参阅Windows Server 2012 中的常见管理任务和导航。

  3. 在 Windows PowerShell 命令提示符处,键入以下命令:

    # To view EventTypeId for all usage event types:
    $SSP = Get-SPEnterpriseSearchServiceApplicationProxy
    $SSP.GetAnalyticsEventTypeDefinitions([Guid]::Empty, 3) | ft
    
  4. 在 HTML 编辑器中,打开应在其中记录自定义使用事件的文件(例如,内容搜索 Web 部件的显示模板),并添加以下代码:

    window.Log<DefaultUsageEventType>ToEventStore = function(url)
    {
        ExecuteOrDelayUntilScriptLoaded(function()
        {
            var spClientContext = SP.ClientContext.get_current();
            SP.Analytics.AnalyticsUsageEntry.logAnalyticsEvent(spClientContext, <EventTypeId>, url);
            spClientContext.executeQueryAsync(null, Function.createDelegate(this, function(sender, e){ alert("Failed to log event for item: "   document.URL   " due to: "   e.get_message()) }));
        }, "SP.js");
    }
    

    其中:

    • <DefaultUsageEventType> 是默认使用事件类型的名称 - 例如,Views

    • <EventTypeId> 是使用事件类型的数字 ID - 例如,1

  5. 在 HTML 编辑器中,打开引用默认使用事件的文件,并添加以下代码:

    # The example below shows how a default usage event type is referred to on a page load:
    <body onload=”Log<DefaultUsageEventType>ToEventStore('<URL>')”> 
    

    其中:

    • <DefaultUsageEventType> 是默认使用事件类型的名称 - 例如,Views

    • <URL> 是应将使用事件记录到的项目的完整 URL,例如,

  6. 保存该文件。

星彩彩票app下载 13

 

# create sa function to list sysadmin members

# usage: sa ServerName

[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | out-null

function sa ($s)

{

$svr="$s"

$srv=New-Object "Microsoft.SqlServer.Management.Smo.Server" "$svr"

$svrole = $srv.Roles | where {$_.Name -eq 'sysadmin'}

$svr

$svrole.EnumServerRoleMembers()

}
添加用于记录默认使用事件的代码并覆盖网站设置
  1. 确认您具有以下成员身份:

    • SQL Server 实例上的 securityadmin 固定服务器角色。

    • 要更新的所有数据库上的 db_owner 固定数据库角色。

    • 运行 Windows PowerShell cmdlet 的服务器上的 Administrators 组。

    • 添加至少具有以上最小权限的成员。

    管理员可以使用 Add-SPShellAdmin cmdlet 授予使用 SharePoint 2013 cmdlet 的权限。

    星彩彩票app下载 14注意:

    如果您不具有相关权限,请联系您的安装管理员或 SQL Server 管理员来请求权限。有关 Windows PowerShell 权限的其他信息,请参阅 Add-SPShellAdmin。

  2. 启动 SharePoint 2013 Management Shell。

    • 对于 Windows Server 2008 R2:

      • 在“开始”菜单上,单击“所有程序”,单击“Microsoft SharePoint 2013 产品”,然后单击“SharePoint 2013 Management Shell”。
    • 对于 Windows Server 2012:

      • 在“开始”屏幕上,单击“SharePoint 2013 Management Shell”。

        如果“SharePoint 2013 Management Shell”不在“开始”屏幕上:

      • 右键单击“计算机”,单击“所有应用程序”,然后单击“SharePoint 2013 Management Shell”。

    有关如何与 Windows Server 2012 进行交互的详细信息,请参阅Windows Server 2012 中的常见管理任务和导航。

  3. 在 Windows PowerShell 命令提示符处,键入以下命令:

    # To view EventTypeId for all usage event types:
    $SSP = Get-SPEnterpriseSearchServiceApplicationProxy
    $SSP.GetAnalyticsEventTypeDefinitions([Guid]::Empty, 3) | ft
    
  4. 在 HTML 编辑器中,打开应在其中记录自定义使用事件的文件(例如,内容搜索 Web 部件的显示模板)。以下示例显示如何覆盖当前 SiteId、WebId 和 UserId。

    window.Log<DefaultUsageEventType>ToEventStore = function(url, siteIdGuid, webIdGuid, spUser)
    {
        ExecuteOrDelayUntilScriptLoaded(function()
        {
          var spClientContext = SP.ClientContext.get_current();
          SP.Analytics.AnalyticsUsageEntry.logAnalyticsEvent(spClientContext, <EventTypeId>, url, webIdGuid, siteIdGuid, spUser);
    spClientContext.executeQueryAsync(null, Function.createDelegate(this, function(sender, e){ alert("Failed to log event for item: "   document.URL   " due to: "   e.get_message()) }));
        }, "SP.js");
    }
    

    其中:

    • <DefaultUsageEventType> 是默认事件类型的名称 - 例如,Views

    • <EventTypeId> 是使用事件类型的数字 ID - 例如,1

  5. 在 HTML 编辑器中,打开引用默认使用事件类型的文件,并添加以下代码:

    # The example below shows how a default usage event type is referred to on a page load:
    <body onload=”Log<DefaultUsageEventType>ToEventStore('<URL>', new SP.Guid('{<SiteId GUID>}'), new SP.Guid('{<WebId GUID>}'), '<UserName>')”>
    

    其中:

    • <DefaultUsageEventType> 是默认事件类型的名称 - 例如,Views

    • <URL> 是在托管属性 OriginalPath 中的 URL。

    • <SiteId GUID> 是托管属性 SiteID 的 GUID。

    • <WebId GUID> 是托管属性 WebId 的 GUID。

    • <UserName> - 例如,可以是用于标识具有匿名用户的网站上的用户的 Cookie ID。

星彩彩票app下载 15注意:

我们建议您在执行命令行管理任务时使用 Windows PowerShell。Stsadm 命令行工具已被弃用,仍然包含该工具是为了支持与之前产品版本的兼容性。

使用GUI创建任务计划是比较简单的,但是对于项目部署来说就比较麻烦了,最好能自动化部署,所以考虑使用脚本来操作。

这种方式完全是体力活,费时费力,除非是没有方法的前提下,才会使用这种方式。完全不推荐这种方法。

列出服务器上的本地管理员

更改使用事件类型的重要性级别

使用事件类型属性 RecommendationWeight 是一个数值,该数值显示某个使用事件类型相对于建议计算中使用的其他使用事件类型的重要性级别。默认查看次数使用事件类型具有的预配置的 RecommendationWeight 值为 1。其他默认使用事件类型(显示的建议点击的建议)以及所有自定义使用事件类型具有的 RecommendationWeight 值为 0。若要提高建议计算中的使用事件类型的重要性,请更改 RecommendationWeight 参数的值。可用的最高重要性级别为 10。

Windows提供了一个命令行工具:Schtasks.exe,可以在DOS下对任务计划进行创建、修改、删除等高级操作。可以在这里.aspx)查看其详细说明。

 

我使用下面的脚本(及前一个)保持在服务器和SQL Server上拥有Admin权限的人数最少。这个例子由Microsoft MVP Ying Li所写并贴在他的博客上。它演示了如何列出服务器上的本地管理员。这个函数接收一个服务器名称,然后连接指定的服务器并列出其上的本地管理员组的成员。

更改使用事件类型的重要性级别
  1. 确认您具有以下成员身份:

    • SQL Server 实例上的 securityadmin 固定服务器角色。

    • 要更新的所有数据库上的 db_owner 固定数据库角色。

    • 运行 Windows PowerShell cmdlet 的服务器上的 Administrators 组。

    • 添加至少具有以上最小权限的成员。

    管理员可以使用 Add-SPShellAdmin cmdlet 授予使用 SharePoint 2013 cmdlet 的权限。

    星彩彩票app下载 16注意:

    如果您不具有相关权限,请联系您的安装管理员或 SQL Server 管理员来请求权限。有关 Windows PowerShell 权限的其他信息,请参阅 Add-SPShellAdmin。

  2. 启动 SharePoint 2013 Management Shell。

    • 对于 Windows Server 2008 R2:

      • 在“开始”菜单上,单击“所有程序”,单击“Microsoft SharePoint 2013 产品”,然后单击“SharePoint 2013 Management Shell”。
    • 对于 Windows Server 2012:

      • 在“开始”屏幕上,单击“SharePoint 2013 Management Shell”。

        如果“SharePoint 2013 Management Shell”不在“开始”屏幕上:

      • 右键单击“计算机”,单击“所有应用程序”,然后单击“SharePoint 2013 Management Shell”。

    有关如何与 Windows Server 2012 进行交互的详细信息,请参阅Windows Server 2012 中的常见管理任务和导航。

  3. 在 Windows PowerShell 命令提示符处,键入以下命令:

    # To view EventTypeId for all usage event types:
    $SSP = Get-SPEnterpriseSearchServiceApplicationProxy
    $SSP.GetAnalyticsEventTypeDefinitions([Guid]::Empty, 3) | ft
    
    # To get a usage event type:
    $tenantConfig = $SSP.GetAnalyticsTenantConfiguration([Guid]::Empty)
    $event = $tenantConfig.EventTypeDefinitions | where-object { $_.EventTypeId -eq <EventTypeId> }
    
    # To change the importance level of a usage event type:
    $event.RecommendationWeight = <RecommendationWeightNumber>
    $tenantConfig.Update($SSP)
    
    # To verify the changed importance level for the usage event type:
    $tenantConfig = $SSP.GetAnalyticsTenantConfiguration([Guid]::Empty)
    $event = $tenantConfig.EventTypeDefinitions | where-object { $_.EventTypeId -eq <EventTypeId> }
    $event
    

    其中:

    • <EventTypeId> 是您要更改其权重的使用事件类型的数值 ID,例如,256

    • <RecommendationWeightNumber> 是您要应用到用户事件类型的重要性级别,例如,4

星彩彩票app下载 17注意:

我们建议您在执行命令行管理任务时使用 Windows PowerShell。Stsadm 命令行工具已被弃用,仍然包含该工具是为了支持与之前产品版本的兼容性。

我创建的任务计划批处理脚本如下:

 

# create ListAdmins function to list local Administrators on a server.

# usage: ListAdmins ServerName

function ListAdmins ($svr)

{

$domain = [ADSI]""

$strComputer = $svr

$computer = [ADSI]("WinNT://"   $strComputer   ",computer")

$computer.name;

$Group = $computer.psbase.children.find("administrators")

$Group.name

$members= $Group.psbase.invoke("Members") | %{$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)}

$members

} 

更改使用事件类型的“最近”时间段

使用事件类型属性 RecentPopularityTimeframe 是一个数值,该数值定义“最受欢迎的项目”报告中的“最近”时间段。“最受欢迎的项目”报告按照使用事件类型显示库或列表中所有项目的最受欢迎的项目(例如,库或列表中查看次数最多的项目)。该报告可按时间段“最近”或“曾经”进行排序。默认情况下,“最近”时间段将设置为每种使用事件的最近 14 天。您可以将其更改为一个介于 1 天和 14 天之间的时间段。

@echo off

3:使用 PowerShell命令查看

查询多台服务器上的登录或AD组

更改使用事件类型的“最近”时间段
  1. 确认您具有以下成员身份:

    • SQL Server 实例上的 securityadmin 固定服务器角色。

    • 要更新的所有数据库上的 db_owner 固定数据库角色。

    • 运行 Windows PowerShell cmdlet 的服务器上的 Administrators 组。

    • 添加至少具有以上最小权限的成员。

    管理员可以使用 Add-SPShellAdmin cmdlet 授予使用 SharePoint 2013 cmdlet 的权限。

    星彩彩票app下载 18注意:

    如果您不具有相关权限,请联系您的安装管理员或 SQL Server 管理员来请求权限。有关 Windows PowerShell 权限的其他信息,请参阅 Add-SPShellAdmin。

  2. 启动 SharePoint 2013 Management Shell。

    • 对于 Windows Server 2008 R2:

      • 在“开始”菜单上,单击“所有程序”,单击“Microsoft SharePoint 2013 产品”,然后单击“SharePoint 2013 Management Shell”。
    • 对于 Windows Server 2012:

      • 在“开始”屏幕上,单击“SharePoint 2013 Management Shell”。

        如果“SharePoint 2013 Management Shell”不在“开始”屏幕上:

      • 右键单击“计算机”,单击“所有应用程序”,然后单击“SharePoint 2013 Management Shell”。

    有关如何与 Windows Server 2012 进行交互的详细信息,请参阅Windows Server 2012 中的常见管理任务和导航。

  3. 在 Windows PowerShell 命令提示符处,键入以下命令:

    # To view EventTypeId for all usage event types:
    $SSP = Get-SPEnterpriseSearchServiceApplicationProxy
    $SSP.GetAnalyticsEventTypeDefinitions([Guid]::Empty, 3) | ft
    
    # To get a usage event type:
    $tenantConfig = $SSP.GetAnalyticsTenantConfiguration([Guid]::Empty)
    $event = $tenantConfig.EventTypeDefinitions | where-object { $_.EventTypeId -eq <EventTypeId> }
    
    # To change the Recent time span for a usage event type:
    $event.RecentPopularityTimeFrame = <TimeFrame>
    $tenantConfig.Update($SSP)
    
    # To verify the changed Recent time frame for the usage event type:
    $tenantConfig = $SSP.GetAnalyticsTenantConfiguration([Guid]::Empty)
    $event = $tenantConfig.EventTypeDefinitions | where-object { $_.EventTypeId -eq <EventTypeId> }
    $event
    

    其中:

    • <EventTypeId> 是您要更改其“最近”时间段的使用事件类型的数值 ID,例如,256

    • <TimeFrame> 是您要应用到用户事件类型的新“最近”时间段,例如,7

    星彩彩票app下载 19注意:

    系统仅在运行 Usage Analytics 计时器作业后更新对“最近”时间段的任何更改。

星彩彩票app下载 20注意:

我们建议您在执行命令行管理任务时使用 Windows PowerShell。Stsadm 命令行工具已被弃用,仍然包含该工具是为了支持与之前产品版本的兼容性。

REM 创建任务计划

 

我最初的SMO例子之一,灵感来自于我的主管,她让我找出数据建模组能访问那些数据库服务器。她希望只是开发服务器能被这个组访问。

启用和禁用匿名用户的使用事件日志记录

在未连接到帐户的情况下浏览网站内容的用户称作“匿名用户”。仅为匿名用户的日志记录启用“查看次数”事件类型。默认情况下,将为匿名用户禁用自定义使用事件的日志记录。

schtasks /create /tn import /tr "powershell -File "C:Excel to SQL Server Demo.ps1"" /sc monthly /mo 1 /d 15 /st 22:00 /ru ""

PS C:Windowssystem32> Get-Service *SQL*

 

Status   Name               DisplayName

------   ----               -----------

Stopped  ApexSqlSscHost     ApexSQL server side components host...

Stopped  MSSQLFDLauncher    SQL Full-text Filter Daemon Launche...

Running  MSSQLSERVER        SQL Server (MSSQLSERVER)

Stopped  SQL Server Dist... SQL Server Distributed Replay Client

Stopped  SQL Server Dist... SQL Server Distributed Replay Contr...

Stopped  SQLBrowser         SQL Server Browser

Running  SQLSERVERAGENT     SQL Server Agent (MSSQLSERVER)

Stopped  SQLWriter          SQL Server VSS Writer

下面的例子以5到7行代码就结束了(这也取决于你的格式编排),但是不管你的服务器清单上有多少服务器,这将会找出登录/组。

启用匿名用户的使用事件日志记录
  1. 确认您具有以下成员身份:

    • SQL Server 实例上的 securityadmin 固定服务器角色。

    • 要更新的所有数据库上的 db_owner 固定数据库角色。

    • 运行 Windows PowerShell cmdlet 的服务器上的 Administrators 组。

    • 添加至少具有以上最小权限的成员。

    管理员可以使用 Add-SPShellAdmin cmdlet 授予使用 SharePoint 2013 cmdlet 的权限。

    星彩彩票app下载 21注意:

    如果您不具有相关权限,请联系您的安装管理员或 SQL Server 管理员来请求权限。有关 Windows PowerShell 权限的其他信息,请参阅 Add-SPShellAdmin。

  2. 启动 SharePoint 2013 Management Shell。

    • 对于 Windows Server 2008 R2:

      • 在“开始”菜单上,单击“所有程序”,单击“Microsoft SharePoint 2013 产品”,然后单击“SharePoint 2013 Management Shell”。
    • 对于 Windows Server 2012:

      • 在“开始”屏幕上,单击“SharePoint 2013 Management Shell”。

        如果“SharePoint 2013 Management Shell”不在“开始”屏幕上:

      • 右键单击“计算机”,单击“所有应用程序”,然后单击“SharePoint 2013 Management Shell”。

    有关如何与 Windows Server 2012 进行交互的详细信息,请参阅Windows Server 2012 中的常见管理任务和导航。

  3. 在 Windows PowerShell 命令提示符处,键入以下命令:

    # To view EventTypeId for all usage event types:
    $SSP = Get-SPEnterpriseSearchServiceApplicationProxy
    $SSP.GetAnalyticsEventTypeDefinitions([Guid]::Empty, 3) | ft
    
    # To get a usage event type:
    $tenantConfig = $SSP.GetAnalyticsTenantConfiguration([Guid]::Empty)
    $event = $tenantConfig.EventTypeDefinitions | where-object { $_.EventTypeId -eq <EventTypeId> }
    
    # To enable the logging of anonymous users:
    $event.Options = [Microsoft.Office.Server.Search.Analytics.EventOptions]::AllowAnonymousWrite
    $tenantConfig.Update($SSP)
    
    # To verify that the logging of anonymous users has been enabled, i.e. that the Options property is set to AllowAnonymousWrite:
    $tenantConfig = $SSP.GetAnalyticsTenantConfiguration([Guid]::Empty)
    $event = $tenantConfig.EventTypeDefinitions | where-object { $_.EventTypeId -eq <EventTypeId> }
    $event
    

    其中:

    • <EventTypeId> 是您要为匿名用户的日志记录启用的使用事件类型的数值 ID,例如,256

echo 创建计划任务成功!

 

# Find a login or AD group on multiple servers

[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | out-null

foreach ($svr in get-content "C:AllServers.txt")

{

$srv=New-Object "Microsoft.SqlServer.Management.Smo.Server" "$svr"

trap {"Oops! $_"; continue } $srv.Logins | where {$_.Name -eq 'DOMAINITS_DATA_ADMIN'} | select Parent, Name

}
禁用匿名用户的使用事件日志记录
  1. 确认您具有以下成员身份:

    • SQL Server 实例上的 securityadmin 固定服务器角色。

    • 要更新的所有数据库上的 db_owner 固定数据库角色。

    • 运行 Windows PowerShell cmdlet 的服务器上的 Administrators 组。

    • 添加至少具有以上最小权限的成员。

    管理员可以使用 Add-SPShellAdmin cmdlet 授予使用 SharePoint 2013 cmdlet 的权限。

    星彩彩票app下载 22注意:

    如果您不具有相关权限,请联系您的安装管理员或 SQL Server 管理员来请求权限。有关 Windows PowerShell 权限的其他信息,请参阅 Add-SPShellAdmin。

  2. 启动 SharePoint 2013 Management Shell。

    • 对于 Windows Server 2008 R2:

      • 在“开始”菜单上,单击“所有程序”,单击“Microsoft SharePoint 2013 产品”,然后单击“SharePoint 2013 Management Shell”。
    • 对于 Windows Server 2012:

      • 在“开始”屏幕上,单击“SharePoint 2013 Management Shell”。

        如果“SharePoint 2013 Management Shell”不在“开始”屏幕上:

      • 右键单击“计算机”,单击“所有应用程序”,然后单击“SharePoint 2013 Management Shell”。

    有关如何与 Windows Server 2012 进行交互的详细信息,请参阅Windows Server 2012 中的常见管理任务和导航。

  3. 在 Windows PowerShell 命令提示符处,键入以下命令:

    # To view EventTypeId for all usage event types:
    $SSP = Get-SPEnterpriseSearchServiceApplicationProxy
    $SSP.GetAnalyticsEventTypeDefinitions([Guid]::Empty, 3) | ft
    
    # To get a usage event type:
    $tenantConfig = $SSP.GetAnalyticsTenantConfiguration([Guid]::Empty)
    $event = $tenantConfig.EventTypeDefinitions | where-object { $_.EventTypeId -eq <EventTypeId> }
    
    # To disable the logging of anonymous users:
    $event.Options = [Microsoft.Office.Server.Search.Analytics.EventOptions]::None
    $tenantConfig.Update($SSP)
    
    # To verify that logging of anonymous users has been disabled, i.e. that the Options property is set to None:
    $tenantConfig = $SSP.GetAnalyticsTenantConfiguration([Gui
    

    其中:

    • <EventTypeId> 是您要为匿名用户的日志记录禁用的使用事件类型的数值 ID,例如,256

    星彩彩票app下载 23注意:

    对于默认使用事件类型“查看次数”,您不能禁用匿名用户的日志记录。

星彩彩票app下载 24注意:

我们建议您在执行命令行管理任务时使用 Windows PowerShell。Stsadm 命令行工具已被弃用,仍然包含该工具是为了支持与之前产品版本的兼容性。

Pause

上面命令只能查看服务,其实很多组件无法查看。那么可以查看WMI class win32_product ,在PowerShell下执行下面命令就看查看安装组件。

脚本中Trap语句处理连接服务器时发生的错误。在这个例子中,如果连接服务器时有错误,将会返回服务器名称和错误信息。偶尔,在输出中我会看到:“Oops!Failed to connect to the server ServerName”.

其中核心的一句命令为:powershell -File "C:Excel to SQL Server Demo.ps1",注意由于双引号出现了嵌套,故需要用进行转义。

 

 

 

get-wmiobject win32_product | where {$_.Name -match "SQL" -AND $_.vendor -eq "Microsoft Corporation"} | select name, version

检查多台服务器上失败的SQL 代理作业

创建的任务计划是:在每月的15号晚上10点钟,以System账户执行脚本C:Excel to SQL Server Demo.ps1

 

每天早上我执行如下脚本来检查在我的服务器上任何失败的SQL代理作业:

任务名为:import。Excel to SQL Server Demo.ps1为另一个PowerShell脚本,负责导入数据的。

星彩彩票app下载 25

# Check for failed SQL jobs on multiple servers

[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | out-null

foreach ($svr in get-content "C:AllServers.txt")

{

write-host $svr

$srv=New-Object "Microsoft.SqlServer.Management.Smo.Server" "$svr"

$srv.jobserver.jobs | where-object {$_.lastrunoutcome -eq "Failed" -and $_.isenabled -eq $TRUE} | format-table name,lastrunoutcome,lastrundate -autosize

} 

执行该批处理,运行结果如下:

 

杂项任务

星彩彩票app下载 26

 

下面这些纯PowerShell的例子,回答了一些DBA也许会有的疑问。

在控制面板里的任务计划里也可以看到创建的任务计划:

 

 检查已安装的修复程序

星彩彩票app下载 27

参考资料:

  # List all installed hotfixes on a server

get-wmiobject Win32_QuickFixEngineering

# Check if a specific hotfix is installed on a server

get-wmiobject Win32_QuickFixEngineering | findstr KB928388

 

 

查找端口号

3、准备工作

我经常被开发者问到命名实例的端口号。通过一个短短的命名管道结合两个cmdlet:Get-Content和Select-String。你就可以通过一行程序在错误日志中找到端口号。这比手动查找错误日志或者执行一段SQL代码快多了。

任务计划创建好后,下面我们就要编写将Excel数据导入到SQL Server中的PowerShell脚本了。

我曾尝试只用Select-String去搜索错误日志,但是由于某些原因,Get-String不能读取活动的错误日志,除非与Get-Content结合使用。下在的例子中我在错误日志中查找“Listening”一词。

安装SQL Server 2008 或 R2后会安装两个PowerShell扩展:SqlServerCmdletSnapin100、SqlServerProviderSnapin100,提供了本地及远程执行SQL语句的能力。

# Find a port number

gc \ServerNameShareNameMSSQL2005MSSQL.2MSSQLLOGERRORLOG | select-string "listening"

在这一次的测试环境中,中间服务器安装的是SQL Server 2000,显然不能随便将其升级,故需要手动来安装这两个PowerShell扩展。那么该怎样手动安装呢?

 

我在国外的一篇博客中找到了解决方案:

请记住,如果在服务器上您有循环的错误日志,您需要查找的行可能不在当前的错误日志里。您将需要调整以下的命令,通过在ERRROLOG后追加1,2,3等等,来查找错误日志存档。

3.1、安装.NET Framework 3.5 With SP1,下载地址

如果你在SQL Server 2000的命名实例上搜索错误日志,你需要用反引号将文件路径中的$转义。如下所示:

3.2、安装Office 2010 PIA,下载地址,下载地址

get-content \ServerNameShareNameMSSQL2000MSSQL`$SQL100LOGERRORLOG | select-string "listening"

注:我在虚拟机中安装Office 2010 PIA时出了些问题,始终安装不上,故暂时安装Office 2010 x86进行测试(Office 2010包含PIA)。

 

3.3、安装Windows 管理框架(包含PowerShell 2.0),下载地址

生成随机密码

3.4、安装Microsoft® SQL Server® 2008 R2 功能包,下载地址

如果您需要为SQL登录生成随机密码,您可以使用如下所示的.NET类:

功能包中的组件有很多,只需要安装如下几个,安装也按照下面列出的顺序(这里仅给出 x86架构的下载地址,如果你需要其他架构,请到微软网站下载):

# generate a random password

[Reflection.Assembly]::LoadWithPartialName(”System.Web” ) | out-null

[System.Web.Security.Membership]::GeneratePassword(10,2) # 10 bytes long

[System.Web.Security.Membership]::GeneratePassword(8,2) # 8 bytes long

Microsoft® System CLR Types for SQL Server® 2008 R2,下载地址

 

Microsoft® SQL Server® 2008 R2 Native Client,下载地址

查检多台服务器上的当前备份

Microsoft® Core XML Services (MSXML) 6.0 SP 1,下载地址

在我的环境中,我有两个数据库配置并且备份并不总放置在一个标准位置。因此,我用“Brute Force”方案来检查备份。

Microsoft® SQL Server® 2008 R2 命令行实用工具,下载地址

# Checking backups are current

write-host ''

write-host 'ServerName'

get-childitem \ServerNameShareNamedump_data*.bak | where-object { $_.LastWriteTime -ge (Get-Date).AddDays(-1) } | Select name, LastWriteTime

Microsoft® SQL Server® 2008 R2 共享管理对象,下载地址

星彩彩票app下载 28

Microsoft® Windows PowerShell Extensions for SQL Server® 2008 R2,下载地址

如果服务器上有多个驱动器需要检查,我就为额外的驱动器重复执行Get-ChildItem cmdlet。这里是我ChkBkups.ps1脚本的一个片段:

 

# checking three dump locations on a default instance.

write-host ''

write-host 'Server1'

get-childitem \Server1e$dump_dataServerName*.bak | where-object { $_.LastWriteTime -ge (Get-Date).AddDays(-1) } | Select name, LastWriteTime

get-childitem \Server1g$dump_dataServerName*.bak | where-object { $_.LastWriteTime -ge (Get-Date).AddDays(-1) } | Select name, LastWriteTime

get-childitem \Server1i$dump_data ServerName *.bak | where-object { $_.LastWriteTime -ge (Get-Date).AddDays(-1) } | Select name, LastWriteTime

# checking one dump location on a named instance.

write-host ''

write-host ' Server2'

get-childitem \Server2ShareNamedump_dataServerNameInstancedb_dump*.bak | where-object { $_.LastWriteTime -ge (Get-Date).AddDays(-1) } | Select name, LastWriteTime

3.5、更改PowerShell的执行策略

我每天早上运行这个脚本。我们有一套每晚运行的自动化的例程,它们处理标准的DBA任务,像备份,完整性检查,索引维护等等。每个服务器维护进程会发邮件来报告它们的状态。这个脚本节省了我查看多封邮件的时间。

为了安全起见,PowerShell的默认执行策略为不允许执行任何脚本,详情参见:get-help about_signing 命令。

 

所以我们要将执行策略更改为:允许运行未签名脚本和来来自其他用户的签名脚本。

总结:

Set-ExecutionPolicy Remotesigned -Force

我认为使用PowerShell会让我成为一名更好的DBA,因为我有意识去自动化平常的任务,更快地收集有关服务器的信息,以及更好地管理我的服务器工作负载。我还发现,使用PowerShell会延伸我的知识到时那些我通常不会涉及的领域(这只会是一件好事情)。

 

短短几行PowerhShell代码,怎么能做这么多的事情,这实在很惊人。

3.6、手动安装 SQL Server 2008 R2的PowerShell扩展

在我看来,花时间学习PowerShell是用得其所。

Set-Alias installutil $env:windirmicrosoft.netframeworkv2.0.50727installutil

 

installutil -i "C:Microsoft.SqlServer.Management.PSProvider.dll"

引用:

installutil -i "C:Microsoft.SqlServer.Management.PSSnapins.dll"

ADO.Net

 

  • Books24x7.com – subscription required"> Microsoft ADO.NET 2.0 Step by Step by Rebecca M. Riordan

使用Set-Alias命令为installutil创建一个别名,其中installutil.exe是.NET框架自带的安装辅助工具,这里将注册SQL Server 的两个程序集。

SMO

这两个程序集的位置位于:C:Program Files (x86)Microsoft SQL Server100ToolsBinn (x64)

  • SQL Server Books Online:
  • Blogs:

C:Program FilesMicrosoft SQL Server100ToolsBinn(x86)

WMI

可以在SQL Server 2008 或 SQL Server 2008 R2的安装目录中找到:

星彩彩票app下载 29

PowerShell

当然,中间服务器是不一定安装有SQL Server 2008的,所以要从别的机器上复制出来。

  • “Getting Started Guide”
  • Books.
  • “Windows PowerShell In Action” by Bruce Payette
  • Windows PowerShell: TFM” by Don Jones and Jeffery Hicks
  • Newsgroups
  • microsoft.public.windows.powershell
  • Blogs and articles:

使用Get-PSSnapin –Registered命令查看程序集是否安装成功:

星彩彩票app下载 30

 

3.7添加PSSnapin

注意PSSnapin不能重复添加

try

{

Add-PSSnapin -Name SqlServerCmdletSnapin100

}

catch

{

    

}

try

{

Add-PSSnapin -Name SqlServerProviderSnapin100

}

catch

{

    

}

 

3.8、安装Microsoft Access Database Engine 2010 Redistributable

MADE 2010包含一系列的组件,使得非 Microsoft Office 应用程序可以使用这些组件从 Microsoft Office 2010 文件中读取数据,当然也是向后兼容的。

我准备在SQL语句中用OPENDATASOURCE函数读取Excel,故需要下载MADE 2010,下载地址。

 

3.9、在中间服务器上创建数据库Middle

Invoke-Sqlcmd -Query "IF NOT EXISTS(SELECT * FROM dbo.sysdatabases WHERE name = 'Middle')

BEGIN

    CREATE DATABASE [Middle] ON PRIMARY

    ( NAME = N'Middle', FILENAME = N'C:Program FilesMicrosoft SQL ServerMSSQLDataMiddle.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )

     LOG ON

    ( NAME = N'Middle_log', FILENAME = N'C:Program FilesMicrosoft SQL ServerMSSQLDataMiddle_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)

END

GO" -ServerInstance "." -Username sa -Password ******

 

3.10、在Middle数据库中创建表Users

这里假定向中间服务器中的数据库Middle的Users表中导入数据,创建表的脚本如下:

Invoke-Sqlcmd -Query "

USE Middle

GO

IF NOT EXISTS(SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID('Users') and OBJECTPROPERTY(id, N'IsUserTable') = 1)

BEGIN

    CREATE TABLE dbo.Users

    (

        UserID INT IDENTITY(1, 1) NOT NULL,

        UserName VARCHAR(20) NULL,

        UserPass VARCHAR(20) NULL,

        CONSTRAINT PK_Users_UserID PRIMARY KEY(UserID)

    )

END

GO" -ServerInstance "." -Database Middle -Username sa -Password ******

 

我准备了5个Excel文件做测试,简单起见,仅包含一个工作表,两列数据,第一列作为UserName,第二列作为UserPass:

星彩彩票app下载 31

 

星彩彩票app下载 32

 

3.12、创建存储过程

因为OPENDATASOURCE函数不支持直接传递参数,故需要使用动态SQL语句。

Invoke-Sqlcmd -Query "

USE Middle

GO

IF EXISTS(SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'sp_导入Users表数据') AND OBJECTPROPERTY(id, N'IsProcedure') = 1)

BEGIN

    DROP PROCEDURE dbo.sp_导入Users表数据

END

GO

CREATE PROCEDURE dbo.sp_导入Users表数据

(

    @ACEVersion VARCHAR(50),

    @ExcelPath NVARCHAR(1000),

    @ExcelVersion VARCHAR(50),

    @SheetName VARCHAR(50)

)

AS

 

DECLARE @SQL VARCHAR(8000)

SET @SQL = '

    INSERT INTO Users(UserName, UserPass)

    SELECT * FROM OPENDATASOURCE(''' @ACEVersion ''', ''Data Source = ' @ExcelPath ';Extended Properties = ' @ExcelVersion ''')...[' @SheetName '$]'

EXECUTE(@SQL)

GO" -ServerInstance "." -Database Middle -Username sa -Password ******

 

4、将Excel数据导入SQL Server

调用存储过程

Add-Type -AssemblyName Microsoft.Office.Interop.Excel

$app = New-Object -TypeName Microsoft.Office.Interop.Excel.ApplicationClass

$dir = New-Object -TypeName System.IO.DirectoryInfo -ArgumentList C:tmp

foreach($file in $dir.GetFiles("*.xlsx", [System.IO.SearchOption]::AllDirectories))

{

    $ExcelPath = $file.FullName

    Invoke-Sqlcmd -Query "EXECUTE dbo.sp_导入Users表数据 'Microsoft.ACE.OLEDB.12.0', '$ExcelPath', 'Excel 12.0', 'User'" -Database Middle -Username sa -Password ******

}

$app.Quit()

[System.Runtime.InteropServices.Marshal]::ReleaseComObject($app)

$app = $null

 

这里有点奇怪,我安装的是Microsoft.ACE.OLEDB.14.0,但是却只能使用Microsoft.ACE.OLEDB.12.0,使用14.0会提示未注册:

星彩彩票app下载 33

关于连接字符串的写法参见ConnectionString网站。

 

最终运行结果:

星彩彩票app下载 34

 

小结:

将Excel导入到SQL Server中有很多种解决方案,具体应取决于业务。我这里采用纯脚本的方式来处理,优点是非常灵活,速度较快,可扩展性很强。且PowerShell建立在.NET之上,可以调用其他类库,进一步扩展了其适用范围。如调用存储过程时使用了Office 2010 PIA、System.IO等,和一般的C#代码很相像。缺点是需要安装很多依赖组件,如.NET 3.5 SP1,SQL Server 2008 R2 功能包等,部署准备工作复杂,且难以对待导入的Excel进行更细粒度的控制,不能精确到单元格。若Excel中的数据格式很不规整、数据类型混乱,则会带来一些麻烦,实际项目中应根据需求决定使用哪种方案,合适的才是最好的。

本文由星彩网app下载发布于星彩彩票app下载,转载请注明出处:星彩彩票app下载查阅Windows服务器安装了那几个

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。