C++何以在windows计划中调用备份sharepoint2010网站集的powershell脚本

近些年出只品种要以以windows计划中采取powershell脚本备份sharepoint2010网站集,打开sharepoint的powershell执行命令管理界面的习性

C++ 1

C++ 2

查看:

C:\Windows\System32\WindowsPowerShell\v1.0\PowerShell.exe
-NoExit ” & ‘ C:\Program Files\Common Files\Microsoft Shared\Web
Server
Extensions\14\CONFIG\POWERSHELL\Registration\\sharepoint.ps1 ‘

 

先看看PowerShell.exe
的帮助

PowerShell.exe 控制台帮助
从外一样器(如 Cmd.exe)的命执行启动 Windows PowerShell。 语法
PowerShell[.exe] [-PSConsoleFile <file> | -Version
<version>] [-EncodedCommand <Base64EncodedCommand>]
[-ExecutionPolicy <ExecutionPolicy>] [-File <filePath>
<args>] [-InputFormat {Text | XML}] [-NoExit] [-NoLogo]
[-NonInteractive] [-NoProfile] [-OutputFormat {Text | XML}]
[-Sta] [-WindowStyle <style>] [-Command { – |
<script-block> [-args <arg-array>] | <string> [<CommandParameters>]
} ] PowerShell[.exe] -Help | -? | /? 参数 -EncodedCommand 接受命令的
Base 64 编码字符串版本。使用这参数可向 Windows PowerShell
提交需要复杂引号或大括如泣如诉的一声令下。 -ExecutionPolicy
设置会话的默认执行政策。此参数不会见改在注册表中装置的 Windows
PowerShell 执行政策。 -File
运行指定的剧本。请输入脚本文件路径和一部分参数。 -InputFormat 描述发送至
Windows PowerShell 底多寡格式。有效值为”Text”(文本字符串)或”XML”(序列化 CLIXML 格式)。 -NoExit
运行了启动命令后不脱离。 -NoLogo 启动时隐藏版权标志。 -NonInteractive
不为用户展示交互式提示。 -NoProfile 不加载 Windows PowerShell 配置文件。
-OutputFormat 确定 Windows PowerShell 的出口格式。有效值为”Text”(文本字符串)或”XML”(序列化 CLIXML 格式)。
-PSConsoleFile 加载指定的 Windows PowerShell
控制台文件。若使创造控制台文件,请以 Windows PowerShell 中之
Export-Console cmdlet。 -Sta 使用单线程单元启动 shell。 -Version 启动
Windows PowerShell 的指定版本。请按照该参数输入一个本子号,例如”-version 1.0″。 -WindowStyle
将窗口样式设置为 Normal、Minimized、Maximized 或 Hidden。 -Command
按照实施于 Windows PowerShell
命令提示符下键入的授命那样,执行指定的命和富有参数;如果非指定
NoExit,则行完命令后拿退。Command 的价好是”-“、字符串或下本块。 如果 Command
的价值吗”-“,则由标准输入被读取命令文本。
脚本块必须充满在大括号 ({}) 中。只有以 Windows PowerShell 中运行
PowerShell.exe 时才能够指定脚本块。脚本的运行结果用当反序列化 XML
对象(而无活动对象)返回父 shell。 如果 Command 的价值吗字符串,则 Command
必须是该令的末梢一个试样参数,因为那后键入的有所字符都见面让解说也它们的实在参数。
若要编运行 Windows PowerShell 命令的字符串,请动以下格式: “& {<command>}”
其中,引号指示一个字符串,调用运算符 (&) 用于执行命令。 -Help, -?, /?
显示这消息。如果假定在 Windows PowerShell 中键入 PowerShell.exe
命令,请用连字符 (-) 作为命令参数的前缀,而不用动正斜杠 (/)。在
Cmd.exe 中,既好运用并字符,也堪行使正斜杠。 示例 PowerShell -PSConsoleFile
sqlsnapin.psc1 PowerShell -version 1.0 -NoLogo -InputFormat text
-OutputFormat XML PowerShell -Command {Get-EventLog -LogName security}
PowerShell -Command “& {Get-EventLog
-LogName security}” # To use the -EncodedCommand parameter:
$command = “dir ‘c:\program files’
” $bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes) powershell.exe
-encodedCommand $encodedCommand

 

问询如达到信息。我们来修用powershell备份网站集的台本。代码如下:

 

#//*************************************************************
#//编辑人:XXX
#//编辑单位:XXX
#//编辑作用:备份所有站点,按照周1到周日创建7个文件夹
#//编制时间:2013.08.26
#//*************************************************************
#**************************************************默认C#盘下,需要改动如下参数
$Location = "d:\"
#网站集URL
$siteUrl=http://XX.XXX.com
#**************************************************
#根目录名称
$RootName="EPBackUp"
#子文件夹
$folderName = (Get-Date).DayOfWeek
#全路径
$folderPath = $Location + "\" + $RootName
#如果根文件夹不存在。则创建根文件夹
If((Test-Path $Location) -eq $False) {
    Write-Host "开始创建根文件夹...---------------"
    New-Item -path $Location -name $RootName -itemType "directory"
    Write-Host "创建根文件夹完毕...---------------"
}


#如果星期文件夹不存在,则创建星期文件夹
$weekPath =$folderPath + "\" + $folderName
If((Test-Path $weekPath) -eq $False) {
    Write-Host "正在创建周期文件夹......."
    New-Item -path $folderPath -name $folderName -itemType "directory"
    Write-Host "创建周期文件夹完毕...---------------"
}


#******************************************************************
#添加如下2行代码为windows计划执行使用,否则windows计划无法执行ps1
$MySnapin="Microsoft.SharePoint.PowerShell"
if ( (Get-PSSnapin -Name $MySnapin -ErrorAction SilentlyContinue) -eq $null )
{
    Write-Host "正在导入sharepoint的commandlet...---------------"
    Add-PSSnapin $MySnapin
    Set-ExecutionPolicy -ExecutionPolicy "Unrestricted" -Force
    Write-Host "导入的sharepoint的commandlet完毕...---------------"
}
#******************************************************************
#整个文件夹全路径
$BackupFilePath = $folderPath + "\" + $folderName

#公司门户文件夹
$epName = $BackupFilePath + "\SPSite_EP.bak"
Write-Host "开始备份公司门户...---------------"
backup-SPSite $siteUrl -Path $epName -force
Write-Host "备份公司门户完毕...---------------"

#学习与发展门户文件夹
$KMSiteUrl = $siteUrl +"/km"
$KMName = $BackupFilePath + "\SPSite_KM.bak"
Write-Host "开始备份学习与发展...---------------"
backup-SPSite $KMSiteUrl -Path $KMName -force
Write-Host "备份学习与发展完毕...---------------"

#协作空间文件夹
$WorkSiteUrl = $siteUrl +"/workspace"
$WorkName = $BackupFilePath + "\SPSite_WorkSpace.bak"
Write-Host "开始备份协作空间...---------------"
backup-SPSite $WorkSiteUrl -Path $WorkName -force
Write-Host "备份协作空间完毕...---------------"

说明:

Add-PSSnapin, alias 为 asnp
是从未呀难以知晓的地方。Java里面有import来导入类库,同样C++里面来using

来导入库。在powershell
中有add-pssnapin来导入内置之外的commandlets。比如您自己写了一个commandlet用来算和说明MD5选要,怎么当console下用你协调写的commandlet呢(现在尚无放开的算MD5的commandlet,只能用.NET里面的库房)?让add-pssnapin来辅助而。
语法 Add-PSSnapin [-name] <string[]>
[-passThru]
[<CommonParameters>]
例子1 add-PSSnapIn
Microsoft.Exchange,Microsoft.Windows.AD
将Microsoft.Exchange
和Microsoft.Windows.AD 
snappin添加到目前console中失去。
立刻简单独snappin中的所有类,函数只以现阶段console中有效。如果想如果当前console的snapin在末端可用,请圈后边的export-console说明.
例子2 get-pssnapin
-registered | add-pssnapin
-passthru
拿具备注册了之snapin加入到眼前对话中失去。

创建windows计划

注意点:

#******************************************************************
#加上如下2行代码为windows计划执行下,否则windows计划无法履行ps1
Add-PSSnapin “Microsoft.SharePoint.PowerShell”
Set-ExecutionPolicy -ExecutionPolicy “Unrestricted” -Force
#******************************************************************

创建基本任务

C++ 3

C++ 4

C++ 5

C++ 6

C++ 7

1)、程序脚本:C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

2)、添加参数:-NonInteractive 
“c:\BackUp.ps1”

C++ 8

C++ 9

 

咱俩测试下力量图:

C++ 10

 

C++ 11