默认情况下预览版中的实验特性

最近有个项目需要在在windows计划中使用powershell脚本备份sharepoint2010网站集,打开sharepoint的powershell执行命令管理界面的属性

在默认情况下启用所有实验特性,以便让 PowerShell
委员会获得更多反馈,以确定某个特性是否应该继续作为实验功能,是否应该从实验性功能转移到稳定特性(非实验性功能),或者被删除。在稳定的版本(以及候选版本)上,默认情况下将继续禁用实验性功能。

澳门新葡萄京所有网站 1

powershell版本

注意,如果以前手动启用了实验特性,powershell.config.json
设置文件将优先记录,并且只会启用该文件中列出的实验性功能。你可以删除该文件或运行
Get-ExperimentalFeature |
Enable-ExperimentalFeature,以确保启用了所有实验功能。但是,如果使用管道,你将不得不再次使用具有新的实验特性的预览版本。

澳门新葡萄京所有网站 2

如果您的系统是window7或者Windows Server 2008,那么PowerShell
2.0已经内置了,可以升级为3.0,4.0。
如果您的系统是Windows 8 或者Windows server 2012,那么PowerShell
3.0已经内置了,可以升级为4.0。
如果您的系统为Windows 8.1或者Windows server 2012 R2,那默认已经是4.0了。

默认为单线程

查看:

  Windows
Management Framework 4.0

在此版本之前,pwsh 默认作为多线程单元运行。但是,图形用户界面 API(如
WinForms 和 WPF)需要一个单线程单元。 此版本在单线程方面,pwsh 与
powershell.exe 相同,支持从 PowerShell 脚本调用 WinForms 和 WPF API。

C:WindowsSystem32WindowsPowerShellv1.0PowerShell.exe
-NoExit ” & ‘ C:Program FilesCommon FilesMicrosoft SharedWeb
Server
Extensions14CONFIGPOWERSHELLRegistration\sharepoint.ps1 ‘

启动 Windows PowerShell ISE  Integrated Scripting Environment**

澳门新葡萄京所有网站 3

 

在 Windows Vista、Windows Server 2008 和更高版本的 Windows
中,在“开始”菜单中,依次单击“开始”、“所有程序”、“附件”、“Windows
PowerShell”文件夹和“Windows PowerShell ISE”项。
在 Windows XP 和 Windows Server 2003 中,若要启动 Windows
PowerShell,请在“开始”菜单中依次单击“开始”、“程序”、“附件”、“Windows
PowerShell”文件夹和“Windows PowerShell ISE”项。
在 Windows PowerShell 控制台、Cmd.exe
或“运行”框中,键入“powershell_ise.exe”。

显示 COM 方法签名参数名

先看看PowerShell.exe
的帮助

PowerShell中没有文件的概念,只有项【Item】的概念,像Windows驱动器、目录、文件、注册表、变量等信息都被抽象成了”项”的概念,PowerShell使用”项”来进行统一管理。本次我们只关注文件系统,即目录、文件,其他系统后续篇章再做了解。
关于文件系统的命令有如下一些:
New-Item
澳门新葡萄京所有网站,Copy-Item
Move-Item
Remove-Item
Rename-Item
Invoke-Item
当然,这些命令不仅仅用于文件系统,像驱动器、注册表等都可以使用,本次我们只从文件系统的角度去关注这些命令。

现在

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脚本
PowerShell[.exe] -Help | -? | /?

将 DBNull 和 NullString 视为 $null

 

Restricted——默认的设置, 不允许任何script运行
AllSigned——只能运行经过数字证书签名的script
RemoteSigned——运行本地的script不需要数字签名,但是运行从网络上下载的script就必须要有数字签名
Unrestricted——允许所有的script运行
windows默认不允许任何脚本运行,你可以使用”Set-ExecutionPolicy”cmdlet来改变的你PowerShell环境。例如,你可以使用如下命令让PowerShell运行在无限制的环境之下:
PS C:Usersfltps> Set-ExecutionPolicy Unrestricted
Set-ExecutionPolicy :
对注册表项“HKEY_LOCAL_MACHINESOFTWAREMicrosoftPowerShell1ShellIdsMicrosoft.PowerShell”的访问被拒绝。
要更改默认(LocalMachine)作用
域的执行策略,请使用“以管理员身份运行”选项启动 Windows
PowerShell。要更改当前用户的执行策略,请运行 “Set-ExecutionPolicy -Scope
CurrentUser”。
PS C:Usersflt> Set-ExecutionPolicy Unrestricted -Scope
CurrentUser
或者输入以下命令:runas /noprofile /user:Administrator cmd
但是我的管理员账号没有密码,无法切换到administrator权限,显示无法启动服务。
看来这种通过的方法对于没有设置管理员密码的电脑还是有点问题。

使用数据库类型,可能会得到一个 [dbnull]::Value,它相当于数据库中的
$null,但是在 PowerShell
中,这并不等于 $null,所以不能直接比较它。通过对 Joelsallow
的更改,你可以将 [dbnull]::value 和 [nullstring]::value 与 $null
进行比较,并获得 $true。

了解如上信息。我们来编写用powershell备份网站集的脚本。代码如下:

使用java调用powershell脚本,可以使用以下命令:
String cmd = “cmd /c powershell -ExecutionPolicy RemoteSigned -noprofile
-noninteractive -file “”

澳门新葡萄京所有网站 4

 

  • scriptFilename + “””;

Read-Host 提示符对所有输入都有效

#//*************************************************************
#//编辑人: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 "备份协作空间完毕...---------------"

一.最通常的运行脚本的方法是调用它:
PS C:> & “C:BelfryMy first Script.ps1”  
注意: 这里的”&”操作符能允许你调用一个命令, 脚本, 或函数. 比如:
如果路径不包含任何的空格, 那么你就可以忽略引号和’&’操作符.
PS C:> C:BelfryMyscript.ps1
如果脚本就在当前路径下,
你必须使用符号”.”来告诉PowerShell该脚本就在当前路径下.
PS C:> .Myscript.ps1  

Read-host
如何调用控制台主机,以及控制台主机如何提示输入(例如给定值的强制性参数),可能就会遇到这样一种情况:即在使用某些字符时,使用
Read-host
提示脚本中的输入会出现其他意想不到的内容。此版本中已经被修复了。

说明:

二.Dot Sourcing
当使用上面的语法执行脚本的时候,
脚本中定义的变量和函数会在脚本运行结束后消失。如果你使用dot
sourcing来运行脚本的时候,
所有脚本中定义的变量和函数会在脚本运行结束后依然存在。
举例运行dot-sourcing脚本.
PS C:> . “C:BelfryMy first Script.ps1”  
PS C:> . .Myscript.ps1″

-Split 运算符支持负数

Add-PSSnapin, alias 为 asnp
这个没有什么难理解的地方。Java里面有import来导入类库,同样C++里面有using

Powershell对象=属性+方法

解析 appx 修复点

来导入库。在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加入到当前会话中去。

在现实世界中,你可能已经了解对象就是那些能够摸到的东西。Powershell中的对象和现实生活很相似。例如要在现实生活中描述一把小刀。我们可能会分两方面描述它
属性:一把小刀拥有一些特殊的属性,比如它的颜色、制造商、大小、刀片数。这个对象是红色的,重55克,有3个刀片,ABC公司生产的。因此属性描述了一个对象是什么。
方法:可以使用这个对象做什么,比如切东西、当螺丝钉用、开啤酒盖。一个对象能干什么就属于这个对象的方法。

在 Windows 10 上,如果从 Windows Store
安装了应用程序并将它们列在命令行中,它们将显示为 0
字节文件。这些文件实际上是到实际可执行文件的不同类型的链接。使用此更改后,目标可执行文件将在使用
get-child Item 时显示.

创建windows计划

按Insert键设置命令行编辑模式为改写模式,
再按一次Insert键命令行返回插入模式. 当命令行处于改写模式,
你输入字符将会替代被光标高亮显示的字符. 当命令行处于插入模式(默认状态),
字符被插入到光标字符之前.
按Backspace键删除光标前一个字符(改写或插入模式). 改写模式中,
按Delete键删除高亮字符. 在插入模式, 按Delete键删除下一个字符.
按Tab键自动补全你输入的路径. 如果第一个现实的路径不是你期待的,
再一次按Tab知道正确的路径出现. 注意Tab键补全的路径只能是当前子目录中.
例如, 如果你输入了c: 然后按Tab键, 可选路径之一将会是c:windows,
而不是c:windowssystem32. 要进入结构中的下个层次(译者注:
文件系统中就是子目录), 在选择的父目录后输入反斜杠, 然后按Tab键. 例如,
如果你一直按Tab直到看见c:windows, 你可以在行尾输入一个反斜线,
然后继续按Tab键来遍历结构中的下一层.

pwsh 作为登录 shell

注意点:

今天为大家总结了在控制台的所有快捷键, 方便大家使用PowerShell.
实际上Cmd.exe或任何控制台都支持这些快捷键的.

在 Linux 和 MacOS 系统上,有一个登录 shell 的概念,它设置其他应用程序和
shell 继承的环境。在此版本之前,如果你使用 pwsh 作为默认登录
shell,会注意到一些环境变量丢失或不完整。

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

按键

功能

光标向左移动一个字符

Ctrl + ←

光标向左移动一个单词

光标向右移动一个字符

Ctrl + →

光标向右移动一个单词

Home键

光标移动到行首

End键

光标移动到行尾

Delete键

删除光标指向的字符

Backspace键或Ctrl + H

删除光标左边第一个字符

Ctrl + End键

删除从光标到行尾的所有字符

Esc键

清除当前输入的所有字符

Insert键

插入与改写模式切换

Tab键

Tab键自动完成命令,例如:自动完成命令的名称、cmdlet命令的参数、路径。如果第一个提示的对象不是您期望的结果,继续输入Tab键,将会自动显示下一个候选对象。

向上查询历史命令

向下查询历史命令

F7键

显示命令历史记录,以图形列表窗的形式给出所有曾经输入的命令,并可用上下箭头键选择再次执行该命令。

F8键

搜索命令对应的历史记录,在命令上输入命令的一部分内容后,按F8键,可以得到匹配该输入的历史命令。如果有多个匹配项,重复按F8,可以循环显示所有曾经输入的命令。如果命令行为空,则默认匹配所有历史输入的命令。

F9键

按编号选择历史命令,以图形对话框方式要求您输入命令所对应的编号(从0开始),并将该命令显示在屏幕上。

Enter键或Ctrl + M

回车(Enter)

Ctrl + C

终止当前执行的命令

Ctrl + Break

终止当前执行的命令

Alt + F7键

清除所有曾经输入的命令历史记录

通过此更改,pwsh 将与 sh Bourne Shell
在设置登录环境方面的工作方式相同,从而使一切正常工作。

创建基本任务

Powershell把所有环境变量的记录保存在env: 虚拟驱动中,因此可以列出所有环境变量 。一旦查出环境变量的名字就可以使用$env:name 访问了。
PS C:Usersfltps> ls env:

Name                           Value
----                           -----
ALLUSERSPROFILE                C:ProgramData
APPDATA                        C:UsersfltAppDataRoaming
CommonProgramFiles             C:Program FilesCommon Files
CommonProgramFiles(x86)        C:Program Files (x86)Common Files
CommonProgramW6432             C:Program FilesCommon Files
COMPUTERNAME                   FLT-NB
ComSpec                        C:Windowssystem32cmd.exe

PS C:Usersfltps> $env:APPDATA
C:UsersfltAppDataRoaming
PS C:Usersfltps> dir a.ps|Format-List *


PSPath            : Microsoft.PowerShell.CoreFileSystem::C:Usersfltpsa.ps
PSParentPath      : Microsoft.PowerShell.CoreFileSystem::C:Usersfltps
PSChildName       : a.ps
PSDrive           : C
PSProvider        : Microsoft.PowerShell.CoreFileSystem
PSIsContainer     : False
VersionInfo       : File:             C:Usersfltpsa.ps
                    InternalName:
                    OriginalFilename:
                    FileVersion:
                    FileDescription:

PS C:Usersfltps> Get-Variable

Name                           Value
----                           -----
$                              *
?                              True
^                              Get-Variable
args                           {}
ConfirmPreference              High

PS C:Usersfltps> Get-Variable|fl *|more

Name        : $
Description :
Value       : more
Visibility  : Public
Module      :
ModuleName  :
Options     : None
Attributes  : {}

Value       : False
Name        : ?
Description : 上一命令的状态
Visibility  : Public
Module      :
ModuleName  :
Options     : ReadOnly, AllScope
Attributes  : {}

Telemetry

澳门新葡萄京所有网站 5

 

在这个预览版本中,增加了更多的遥测技术,详情见博客。

澳门新葡萄京所有网站 6

 

这个版本也包含了许多 bug 修复以及有针对性的性能改进,请见更改日志:

澳门新葡萄京所有网站 7

cmd控制台与ps控制台
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:Usersflt>powershell
Windows PowerShell
版权所有 (C) 2009 Microsoft Corporation。保留所有权利。
PS C:Usersflt>

例如通过ls获取当前目录的所有文件信息,然后通过Sort -Descending对文件信息按照Name降序排列,最后将排序好的文件的Name和Mode格式化成Table输出。
PS C:Usersflt> ls | sort -Descending Name | Format-Table Name,Mode

Name                                                                            Mode
----                                                                            ----
Videos                                                                          d-r--
Searches                                                                        d-r--
Saved Games                                                                     d-r--
Roaming                                                                         d----
Desktop                                                                         d-r--
Contacts                                                                        d-r--
.vmrc_plugin_ovftool_settings.js                                                -a---

重定向
把命令的输出保存到文件中,‘>’为覆盖,’>>’追加。
PS C:Usersfltps> "poweersheel" > a.txt
PS C:Usersfltps> cat .a.txt
poweersheel
PS C:Usersfltps> "poweersheel" >>a.txt
PS C:Usersfltps> cat a.txt
poweersheel
poweersheel

我们可以把powershell当成一个计算器。象键入命令行那样输入数学表达式,回车,powershell会自动计算并把结果输出。常用的加减乘除模(+,-,*,/,%)运算和小括号表达式都支持。
PS C:Usersflt> 1+2+3
6
PS C:Usersflt> 2/2
1
PS C:Usersflt> 6/3
2
PS C:Usersflt> 2*4
8
PS C:Usersflt> 3%2
1
PS C:Usersflt> 9%6
3
1gb/20mb*10kb
80kb*800*30/1gb
10GB/(80KB*5)/30

Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

C:Usersflt>powershell
Windows PowerShell
版权所有 (C) 2013 Microsoft Corporation。保留所有权利。

先看看$psversiontable,这个变量拆开来看就是ps-version-table,表示PowerShell中各组件的版本号列表。其中表示PowerShell自己的版本号(PSVersion),也包括.NET的版本号(CLRVersion),还有Windows版本号(BuildVersion)
PS C:Usersflt> $psversiontable

Name                           Value
----                           -----
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.18408
BuildVersion                   6.3.9600.16406
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2

接下来看看$host变量,里面一个Version,表示PowerShell的版本号。
PS C:Usersflt> $host

Name             : ConsoleHost
Version          : 4.0
InstanceId       : ec93e349-4833-4185-8f3d-8d365af04d70
UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture   : zh-CN
CurrentUICulture : zh-CN
PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
IsRunspacePushed : False
Runspace         : System.Management.Automation.Runspaces.LocalRunspace
PS C:Usersflt> Get-Host

Name             : ConsoleHost
Version          : 4.0
InstanceId       : ec93e349-4833-4185-8f3d-8d365af04d70
UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture   : zh-CN
CurrentUICulture : zh-CN
PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
IsRunspacePushed : False
Runspace         : System.Management.Automation.Runspaces.LocalRunspace

PS C:Usersflt> Get-Host|Select-Object Name

Name
----
ConsoleHost 

澳门新葡萄京所有网站 8

下载地址:

澳门新葡萄京所有网站 9

1)、程序脚本:C:WindowsSystem32WindowsPowerShellv1.0powershell.exe

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

澳门新葡萄京所有网站 10

澳门新葡萄京所有网站 11

 

我们测试下效果图:

澳门新葡萄京所有网站 12

 

澳门新葡萄京所有网站 13