[TOC]
Описание: Когда я только начинал изучать PowerShell, если мне не удавалось выполнить задачу с помощью однострочной команды PowerShell, я обращался за помощью к графическому интерфейсу. Затем со временем я постепенно овладел навыками написания скриптов, функций и модулей.
#
персонажи для комментариевОписание: Приоритет записи вызова Powershell (сверху вниз):
потому что为Псевдонимизприоритет Самый высокий
。Подведите итог: Alias > Function > Command > Script > File
'
: Знак $ в одинарных кавычках не распознается как переменная""
: Символ $ в двойных кавычках распознается как переменная.@
: Введите многострочную строку в командной строкеПример демо:
# -1. Сравнение использования символов.
PS C:\Users\WeiyiGeek> $a=8; $b='$a is 8'; $b
$a is 8
PS C:\Users\WeiyiGeek> $a=8; $b="$a is 8"; $b
8 is 8
PS C:\Users\WeiyiGeek> $a=8; $b="`$a is 8"; $b
$a is 8
PS C:\Users\WeiyiGeek> $json = [String]@"
>> {
>> "test": 'json',
>> "name": "WeiyiGeek",
>> "age": 1024
>> }
>> "@
PS C:\Users\WeiyiGeek> $json
{
"test": 'json',
"name": "WeiyiGeek",
"age": 1024
}
# -2 Escape-символы для использования новой строки при выполнении команды и использования новой строки при выводе строки.
PS C:\Users\WeiyiGeek> Get-WmiObject -Class win32_bios `
| select serialnumber
# serialnumber
# ------------
# 8QVY862
"This is `nnewLine"
# This is
# newLine
Tips :PowerShellизобычныйвыражениесерединаможет произойтиизхарактер(На самом деле примерноиPerlпочти
)
(1) Символ соответствия строки (заполнитель PlaceHolder):
. Это точка, означающая любой один символ, кроме символа новой строки (любой character except newline (Equivalent: [^\n]))
[^abc] Любой один символ, кроме указанного символа (abc), вы можете заменить abc другими группами символов. (Все characters except the ones specified)
[^a-z] Любой один нестрочный символ (Все characters except those in the region specified)
[abc] Любая единица в указанном наборе символов, то есть любая единица в abc (Один of the characters)
[a-z] Любая единица в указанном диапазоне символов, то есть любая одна строчная буква. Один of the characters in the region
\a Белл (ASCII 7))
\c Any character allowed in XML names
\cA-\cZ Control+A to Control+Z, ASCII 1 to ASCII 26
\d Любое одиночное число, эквивалентное [0-9] (Любой number (Equivalent: [0-9]))
\D Любой один, не являющийся числом. Любой non-number
\e Клавиша ESC (Выход (ASCII 27))
\f Form Feed, (ASCII 12)
\n Разрыв строки break
\r Перевозка return
\s Любая клавиша с одним пробелом (пробел, например табуляция, перевод строки) Любая whitespace (space, tab, new line)
\S Любой один символ без пробелов (Любой non-whitespace)
\t клавиша табуляции
\w Буквы, цифры и подчеркивание (Буква, number or underline)
\W Дополнение \w (небуквенное, number, or underline)
(2) Количество совпадений (квантификатор)
* Появляется ноль раз, 1 раз, несколько раз (Любой (no occurrence, once, many times))
? Появляется ноль раз и 1 раз (Нет occurrence or one occurrence)
{n,} Появляется как минимум n раз (при least n occurrences)
{n,m} Появляются не менее n раз и не более m раз (при least n occurrences, maximum m occurrences)
{n} Встречаются n раз (Ровно n occurrences)
+ Появляются один раз, несколько раз (Один or many occurrences)
Все совпадения по символу,Оба жадные по умолчанию,вот и все Волямаксимальная длинаиз Сделать матч。если想要得приезжатьсамый короткийизсоответствовать,Затем добавьте знак вопроса (?) после указанной выше группы символов.
(3) Соответствующая граница
$ Конец строки (Конец of text)
^ Начало строки(Начало of text)
\b Word boundary
\B No word boundary
\G After last match (no overlaps)
описывать: 我们Может以проходить打开powershell.exe
приложениеwindowsокно для продолженияинтерактивный Заказ行извходить
PS C:\Users\WeiyiGeek> (512*2)/2+512
1024
PS C:\Users\WeiyiGeek> 1gb / 1mb
1024
PS C:\Users\WeiyiGeek> 0x3389
13193
описывать: PS Способен выполнять внешние команды, а также CMD, Прямо сейчас windows Cmd По сути, все, что работает в PS, можно запустить и в PS.
# Просмотр состояния сетевого порта через netstat
netstat
# Просмотрите собственную конфигурацию сети через IPConfig.
ipconfig
# Запустите консоль CMD и введите cmd или cmd.exe, Выйти из cmd можно с помощью команды exit.
cmd
Вопрос: Почему я могу открыть Блокнот через Notpad, но не могу открыть WordPad через Wordpad?
отвечать: потому что为
notepad.exe
родыC:Windows\system32
этот каталог,По умолчанию этот каталог был ВключатьсуществоватьPowershellизсредапеременная$env:Path
середина。иwordpad.exe 所существоватьиз“%ProgramFiles%\Windows NT\Accessories\wordpad.exe“
Нет каталога Включать;
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files (x
86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program File
s (x86)\Microsoft SDKs\TypeScript\1.0\;C:\Program Files\Microsoft\Web Platform Installer\
# Решение: Вы можете сначала войти в этот каталог, а затем запустить wordpad, или добавить каталог, в котором находится Воляwordpad, в окружение переменная, $env:Path=$env:Path+”%ProgramFiles%\Windows NT\Accessories”。
описывать: Та же команда псевдонима для Linux, что и для Windows PSсередина也поддерживать自определение Псевдоним,Что Псевдонимиз Две функциидаНаследовать unix-shellиwindows-cmd
иУдобныйиспользовать
。
Основной пример:
# 1. Запросите реальную команду командлета, на которую указывает псевдоним.
Get-Alias -name ls
# 2. Просмотр доступных псевдонимов
Get-Alias
# Просмотр всех псевдонимов и количества псевдонимов, указывающих на командлет.
ls alias: | Group-Object definition | sort -Descending Count
# 3. Создайте свой собственный псевдоним
PS C:\PS> Set-Alias -Name Edit -Value notepad
PS C:\PS> Edit
PS C:\PS> $alias:Edit
notepad
# 4. Удалите свой псевдоним
# Пользовательские псевдонимы будут автоматически удалены при выходе из PowerShell (при условии, что нет системы импортирования), а встроенные псевдонимы необходимо удалить вручную.
del alias:Edit
# 5. Сохраните свои псевдонимы (экспортируйте с импортировать)
Export-Alias alias.ps1
Import-Alias -Force alias.ps1
# 6. Расширить псевдонимы с помощью функций (этот метод нужен, когда простые псевдонимы не могут завершить работу), чтобы определение псевдонимов стало более гибким;
PS C:\PS> function test-conn { Test-Connection -Count 2 -ComputerName $args}
PS C:\PS> Set-Alias tc test-conn
PS C:\PS> tc localhost # С помощью псевдонимов сопоставления функций можно выполнять более сложные и мощные функции, где $args является заполнителем для параметра.
Source Destination IPV4Address IPV6Address Bytes Time(ms)
------ ----------- ----------- ----------- ----- --------
WeiyiGeek localhost 127.0.0.1 ::1 32 0
описывать: Мы можем запускать файлы и сценарии непосредственно в командной строке PS, но необходимо использовать абсолютные или относительные пути или файлы, которые нужно запускать, должны быть определены в доверенных переменных среды.
PowerShell середина МожетосуществлятьПакетная обработка летучих мышей、Вопросительный знак сценария VB、и файлы сценариев PS1
。
Советы. Скрипты и пакетные процессы представляют собой псевдоисполняемые файлы. Они просто содержат ряд кодов командной строки, которые могут интерпретироваться и выполняться интерпретатором командной строки.
Пример 1. Выполнение пакетной обработки ping.bat в PS
# ping.bat
@echo off
echo #batch File Test#
echo %1%
%1%
pause
Демонстрационный эффект:
PS C:\Users\WeiyiGeek> ./ping whoami
#batch File Test#
whoami
weiyigeek\weiyigeek
Пожалуйста, нажмите любую клавишу, чтобы продолжить. . .
PS C:\Users\WeiyiGeek> ./ping hostname
#batch File Test#
hostname
WeiyiGeek
Пожалуйста, нажмите любую клавишу, чтобы продолжить. . .
WeiyiGeek.ping
Советы: ввод ping в cmd не приведет к выполнению команды ping, а напрямую запустит ping.bat (т. е. .bat охватывает команду cmd), а пакетный файл ping, запускаемый на PS, должен быть в формате ./ping, поэтому Команда такая же, как и в PowerShell, обфускация сценария не произойдет, поскольку PowerShell имеет более безопасный механизм.
Пример 2. Выполнение файла сценария VB в PS.
# осуществлять .\test.vbs Он будет проходить текущий процесс Win32 и отображать подробную информацию о каждом процессе в окне.
# test.vbs
Set wmi = GetObject("winmgmts:")
Set collection = wmi.ExecQuery("select * from Win32_Process")
For Each process in collection
WScript.Echo process.getObjectText_
Next
# существоватьpowershellсерединаосуществлятьVBСкрипт
PS C:\PS> cscript.exe .test.vbs
instance of Win32_Process
{
Caption = "System Idle Process";
CreationClassName = "Win32_Process";
CSCreationClassName = "Win32_ComputerSystem";
....
}
Tips : Как сделать вывод скрипта VB через консоль? Wscript //H:CScript
Tips : 怎样возвращаться原VBСкрипт выводится через окно?WScript //H:WScript
Пример 3. Выполнение файла сценария ps1 в PS. описывать: Powershell имеет собственное расширение скрипта «.ps1».
PS C:\PS> echo "dir;Get-PSProvider;help dir" >test.ps1
PS C:\PS> Get-Content ./test.ps1
dir;Get-PSProvider;help dir
PS C:\PS> ./test.ps1
Вопрос: Что такое трубопровод?
отвечать: Труба ведет себя как серия соединенных сегментов трубы, при этом элементы перемещаются по трубе, проходя через каждый сегмент трубы;
описывать:существовать PS середина Создайте пайплайн, пожалуйстаиспользоватьтрубопроводоператор“|”
Воля Заказ连接существовать Вместе,каждый Заказиз Результат:Воля被использовать作下一Заказизвходить
,иLinuxсерединаShellиспользоватьпохожий, нодадругойиздаоно проходитиз Данные недатекстидаобъект
;
Режим обработки труб:
Tips : Команды конвейера также имеют препятствия. Например, при рекурсивной сортировке файлов вам необходимо получить все файлы перед сортировкой; (Dir C: -recurse | Sort-Object
)
Советы: Каждая команда в конвейере (называемая элементом конвейера) передает свой вывод поэлементно следующей команде в конвейере.
Часто используемые команды, требующие использования каналов:
описывать: PowerShell one Команда представляет собой непрерывный конвейер, а не обязательно команду на физической линии. Но не все команды на физической линии являются однострочными командами.
Советы: Символ вертикальной черты — это символ в PowerShell, который допускает естественные разрывы строк, включая запятые (,) и квадратные левые скобки ([), фигурные скобки ({) и круглые скобки (()).
Советы. Другие менее распространенные символы включают точку с запятой (;), знак равенства (=), а также левые одинарные и двойные кавычки (’,”).
Пример 1. Несмотря на то, что следующая команда состоит из нескольких физических строк, это однострочная команда PowerShell, поскольку она представляет собой непрерывный конвейер.
# 1) Получение системных услуг и просмотр атрибутов
Get-Service |
Where-Object CanPauseAndContinue -eq $true |
Select-Object -Property *
# 2) Выводить файлы в текущий каталог и сортировать их через канал
ls | sort -Descending Name | Format-Table Name,Mode
Пример 2. Использование обратных кавычек (`) или диакритических знаков в качестве символов продолжения строки — спорная тема (ее рекомендуется по возможности избегать), поскольку команды, показанные в примерах выше и ниже, отлично работают в консоли PowerShell. Но если я попытаюсь запустить их на панели консоли PowerShell ISE, я получу ошибку.
# PS (осуществлятьOK)
Get-Service -Name w32time |
>> Select-Object -Property *
# PS ISE : PowerShell ISE Панель консоли не ждет оставшейся части команды на следующей строке (например, PowerShell консоль).
Get-Service -Name w32time |
Пустые элементы труб не допускаются.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordEx
ception
+ FullyQualifiedErrorId : EmptyPipeElement
WeiyiGeek.PowerShellиISE
Решение: избегать PowerShell ISE Эта проблема возникает на панели консоли Shift+Enter
,и Нетда Толькодасуществовать继续осуществлятьна другой линиииз Заказчасв соответствии с Enter。
# PS ISE
PS C:\Users\WeiyiGeek> Get-Service -Name w32time |
# Select-Object -Property *
# Name : w32time
# RequiredServices : {}
# CanPauseAndContinue : False
# CanShutdown : True
# CanStop : True
# DisplayName : Windows Time
# DependentServices : {}
# MachineName : .
# ServiceName : w32time
# ServicesDependedOn : {}
# ServiceHandle :
# Status : Running
# ServiceType : Win32OwnProcess, Win32ShareProcess
# StartType : Manual
# Site :
# Container :
Пример 3. Следующий пример не PowerShell 单行Заказ,потому что为это Нетдаодин连续трубопровод,этодана одной линиииз两个单独Заказ,Используйте точку с запятой(;
)отдельный。
$Service = 'w32time'; Get-Service -Name $Service
# Status Name DisplayName
# ------ ---- -----------
# Running w32time Windows Time
Пример 4. Вывод форматированного текста в канале описывать: PS Результаты объекта можно преобразовать в текст и отобразить на консоли.
# Пример 1. Фактически Out-Default сначала вызовет Format-Table, и по умолчанию будут скрыты дополнительные атрибуты, а затем результат вызова Out-Host будет выведен на консоль.
ls | Out-Default
ls | Format-Table | Out-Host
ls | Format-Table * -Wrap # показывать隐藏изобъектсвойство
описывать: Мы можем сохранить вывод команды в файл с помощью символа перенаправления ‘>’ покрыть ’>>’ добавление;
Идентификатор перенаправления:
Основной пример:
# Пример 1. Простой пример
PS C:\PS> "Powershell Routing" >.txt
PS C:\PS> "Powershell Routing1" >>.txt
PS C:\PS> Get-Content .\.txt
Powershell Routing
Powershell Routing1
# Пример 2. Перенаправление вывода ошибок
Get-Command Get-Acl 1> out.txt 2> error.txt 6> info.txt
описывать: система расширенного типаExtended Type System (ETS)
,ETS会вернотрубопроводсерединаобъектизменять换成текстиз机制
进行宏观调控。
ЭТС состоит из двух частей:
Совет: Объекты типов, содержащиеся в конфигурации ETS, будут преобразованы в текст наилучшим образом. Мы знаем, что объекты типов, содержащиеся в конфигурации ETS, будут преобразованы в текст наилучшим образом.
# 1. Сначала определите тип объекта результата, возвращаемого командой.
PS > $object = Get-WmiObject Win32_Processor | Select-Object -first 1
PS > $object.GetType().FullName
System.Management.ManagementObject #Обнаружен целевой тип: System.Management.ManagementObject
# 2. Затем создайте один файл конфигурации: Win32_Processor.format.ps1xml.
System.Management.ManagementObject
<label>Name</label>
<label>Description</label>
<label>ID</label>
PS > Update-FormatData .Win32_Processor.format.ps1xml #Загрузить в ETS
PS > Get-WmiObject win32_processor
# Name Description ID
# ---- ----------- --
# CPU0 x64 Family 6 Model 15 Stepp... BFEBFBFF000006FD
Дополнение: у этого определения может быть недостаток. Когда мы получаем другие объекты WMI, они также будут отображаться в соответствии с определенными нами правилами.
Базовый экземпляр
# 0. Введите следующую команду, чтобы просмотреть полный список в удобочитаемой форме, передать его другим командлетам и использовать.
Get-Command -Noun Variable | Format-Table -Property Name,Definition -AutoSize -Wrap
# Clear-Variable [-Name] <string[]> [-Include <string[]>] [-Exclude <string[]>] [-Force] [-PassThru] [-Scope <string>] [-WhatIf] [-Confirm] [<CommonParameters>]
# 1. Например, если использовать Out-Host для принудительного постраничного отображения вывода другой команды (который выглядит как переданный текст)
Get-ChildItem -Path F: | Out-Host -Paging
Get-ChildItem F: | Out-Host -Paging
<SPACE> next page; <CR> next line; Q quit
# Оглавление: F:\
# Mode LastWriteTime Length Name
# ---- ------------- ------ ----
# d----- 2019/7/11 12:29 BadUSB-code
# 2. Если работает Get-Location, в то время как текущее местоположение C Корневой путь диска
PS C:\Users\WeiyiGeek> gl
# Path #Текстовый вывод представляет собой сводку информации, а не Get-Location Полное представление возвращаемого объекта
# ----
# C:\Users\WeiyiGeek
#Заголовок в выводе добавляется в процессе форматирования данных отображения на экране, и вы можете получить информацию о Get-Location Возвращенная информация об объекте.
Get-Location | Get-Member -MemberType Property
Get-Location | Get-Member -Name Path
# TypeName: System.Management.Automation.PathInfo
# Name MemberType Definition
# ---- ---------- ----------
# Equals Method bool Equals(System.Object obj)
# 3.если要осуществлятьнесколько больших запросов,Может Запрос一次и Волярезультат存储существоватьпеременнаясередина Позжеиспользоватьпеременнаяизсодержание,иникто需重复использовать Некоторые накладные расходы вышеиз Запрос。property - Британия [ˈprɒpəti]
$TimeService = Get-Service -Name W32Time
$TimeService | Select-Object -Property Name,Status,ServiceType
# Name Status ServiceType
# ---- ------ -----------
# W32Time Running Win32OwnProcess, Win32ShareProcess
# 4. Остановите службу через канал и посмотрите, какие файлы получают символ канала.
# Stop-Service из InputObject параметрAccept по значению (по типу) через канал ServiceController объект 。
Get-Service -Name w32time | Stop-Service
# По трубопроводу Воля w32time перешел к Get-Member, чтобы подтвердить, что это одна строка.
'w32time' | Get-Member
# TypeName: System.String
# 5. в PowerShell середина,всегда должениспользоватьодинарная кавычкаи Нетдадвойные кавычки,Если не указаноизнитьизсодержание Включатьнеобходимо расширить до фактического значенияценитьизпеременная。проходитьиспользоватьодинарная кавычка,PowerShell Не нужно разбирать цитатысередина Включатьизсодержание,потому чтоэтот Может稍微加快代码бегать速度。
'w32time' | Get-Service
# Status Name DisplayName
# ------ ---- -----------
# Running w32time Windows Time
# По трубопроводу Воля w32time перешел к Стоп-Сервис для тестирования
'w32time' | Stop-Service
# 6.Нажмите Stop-Service из Name параметризсвойствоимя称创建自определениеобъект,以测试трубопроводвходить。
$CustomObject = [pscustomobject]@{
Name = 'w32time'
}
# CustomObject переменнаяизсодержаниеда PSCustomObject тип объекта,ииэто Включатьназванный Name изсвойство 。
# Если вы хотите быть в $CustomObject Если вы используете кавычки с обеих сторон переменной, вам необходимо использовать двойные кавычки. В противном случае, если используются одинарные кавычки, текстовая строка будет иметь вид $CustomObject проходитьтрубопроводперешел к Get-Member,и Нетдапередачапеременная Включатьизценить。
$CustomObject | Get-Member
# хотя Воля $CustomObject изсодержаниепроходитьтрубопроводперешел к Stop-Service cmdlet Будет Воля Этот контент связан с Name параметр, но на этот раз он будет связан с именем свойства, а не со значением, потому что $CustomObject изсодержаниедаодиниметьназванный Name изсвойствоизобъект 。
# попробуй По трубопроводу Воля $CustomObject перешел к Stop-Service выдаст ошибку, потому что он не генерирует ServiceController или String объект,ии没有названный Name изсвойство 。
$CustomObject | Stop-Service
# еслиодин Заказизвыходи Другойодин Заказизтрубопроводвходить选项Нет相符,но Может以использовать Select-Object Переименуйте свойства, чтобы они были настроены правильно.
# использовать Select-Object Воля Service Объект переименован в Name изсвойство 。
$CustomObject |
Select-Object -Property @{name='Name';expression={$_.Service}} |
Stop-Service
# 7.использоватьодин Заказизвыход作为Другойодин Заказизвходить。
# Сначала Воля несколько Windows Услуга из Отображаемое имя Сохранить текст проживания файле.
'Background Intelligent Transfer Service', 'Windows Time' | Out-File -FilePath $env:TEMP\services.txt
# Может以бегать Заказ,существоватьскобкисередина提供所需выход,作为需要входитьиз Заказизпараметрценить。
Stop-Service -DisplayName (Get-Content -Path $env:TEMP\services.txt)
# 8.использовать PowerShellGet модульсередина Включатьиз Find-Module командлет, в PowerShell Найдите имя в библиотеке MrToolkit измодуль。и进行安装
Find-Module -Name MrToolkit | Install-Module
Примечание:
1. Разбиение на страницы также снижает загрузку ЦП, поскольку, когда вся страница готова к отображению, обработка командлета, находящегося ранее в конвейере Out-Host, приостанавливается до тех пор, пока не станет доступна следующая страница вывода.
2. Не все хосты PS поддерживают параметр Paging. Например, при попытке использовать параметр Paging в PowerShell ISE вы увидите следующую ошибку:
3. Простой способ найти входные данные конвейера. Установите модуль MrToolkit, содержащий функцию Get-MrPipelineInput;
# этот cmdlet Можетиспользовать于轻松Конечноприниматьтрубопроводвходитьиз Заказпараметр、приниматьизтип объекта,а такжедав соответствии сценитьвозвращатьсядав соответствии ссвойствоимя称приниматьтрубопроводвходить 。
Find-Module -Name MrToolkit | Install-Module
Get-MrPipelineInput -Name Stop-Service
# ParameterName ParameterType ValueFromPipeline ValueFromPipelineByPropertyName
# ------------- ------------- ----------------- ---------------
# InputObject System.ServiceProcess.ServiceController[] True False
# Name System.String[] True True
описывать:переменнаяVariableсуществовать任何一门Скрипт语言или Автор сказалдаязык программированиясередина Вседа存существоватьиз,его сутьда Примерно то же самоеиз;
Тип переменной PS:
Создание переменных
# 0.创建другойтипизпеременная(int/String/Boolen/float)
PS > $var=1;$var;$var="String";$var;$var='TRUE';$var;$var=3.14159267;$var
# 1
# String
# TRUE
# 3.14159267
# 1. Текущее местоположение Воли сохраняется в переменной $loc середина
PS > $loc = Get-Location
PS > $loc #Тип $loc Воля показывает текущее местоположение:
# 2.предотвращатьпеременнаяимяидругойнить Запутатьиспользовать${}
PS > $var=" variable"
PS > $var
variable
PS > ${var}
variable
# 3.какой-то особенныйизхарактерсуществоватьPSсередина Есть специальныйизиспользовать途,一般Не рекомендуетсяиспользовать Этихарактер作为переменнаяимя。
PS C:\> ${"I"like $}="mossfly" #Пожалуйста, заключите весь суффикс переменного имени в фигурные скобки
PS C:\> ${"I"like $}
mossfly
# 4.PS присваивает значения нескольким переменным одновременно
PS C:\> $a=$b=$c=123
# 5. Обменять две переменныеизценить.
PS C:\> $value1=10
PS C:\> $value2=20
PS C:\> $value1,$value2=$value2,$value1
# 6.采использоватьcmdletзаявлениепеременная
New-Variable number -Value 100 -Force -Option readonly #переменнаязащита от записи
New-Variable NUMBER -Value 100 -Force -Option constant -Description "This is my name" #Объявляем константы и описываем их
# 7.переменная Не анализируется
PS C:\> Write-Host the '$HOME' is $home
PS C:\> Write-Host the `$HOME is $home
the $HOME is C:\Users\WeiyiGeek
Управляемые переменные
# 1.показыватьиспользоватьводить машинупеременнаяисредапеременная:
Get-ChildItem variable: #PSВоляпеременнаяиз Сопутствующая информацияиз记录存放существоватьназванныйvariable:изводить машинусередина
Get-ChildItem variable:value* #Находитьпеременная
Get-ChildItem env: #использовать任何 Windows 进程Можетиспользоватьиз相такой жесредапеременная,Чтосерединавключать cmd.exe
# 2. использовать env: Среда доступа к префиксу диска переменная, из-за env: Среда доступа к префиксу диска переменная
#Например, cmd.exe серединаиз %SystemRoot% переменная Включать Операционная системаиз根Оглавлениеимя称
PS > $env:SystemRoot
C:\Windows
PS > $env:JAVA_HOME
Programs\java\jdk
# 3.Пример созданияодинновыйизсредапеременная
$env:LIB_PATH='/usr/local/lib'
PS > $env:WEIYIGEEK=$env:PATH
PS > $env:WEIYIGEEK
# C:\Python27\;C:\Python27\Scripts;
# 4.Примерили者改变更новыйпеременнаяPSсерединада + как маркировочный знак
PS > $env:WEIYIGEEK=$env:PATH + ";c:\"
PS > $env:WEIYIGEEK
# C:\Python27\;C:\Python27\Scripts;c:\\
# 5. Убедитесь, что однапеременная существует, все равно как проверка файловой системы.
PS C:\> -Path variable:value1
True
PS C:\> -Path variable:valueUnkonw
False
# 6.удалитьпеременная
PS C:\> -Path variable:value1
True
PS C:\> Remove-Item variable:value1 -Force # принудительное удаление del -> Remove-Item
PS C:\> -Path variable:value1
False
Переменные WeiyiGeek.Environment отображаются
описывать:После открытияPowershellбудет загружен автоматическиизпеременная,ии某些Переменные автоматизации Только读Нет能写
,общее хранилищеизсодержаниевключать:
PS> $HOME
C:\Users\
PS> $currentProcessID=$pid;$currentProcessID
5356
PS> Get-Process -Id $pid
# Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
# ------- ------ ----- ----- ----- ------ -- -----------
# 390 10 30604 33100 172 1.11 5356 powershell
PS> $PROFILE
C:\Users\\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Подробное описание - Список автоматических переменных:
$$ : Включить сессию, полученную из последней строки серединаиз последнего токена.
$? : Включатьнаконецодиндействоватьизосуществлятьсостояние。еслинаконецодиндействовать成功,но Включать ИСТИНА, в случае неудачи он содержит FALSE。
$^ : Включатьсессия полученаприезжатьизнаконец一行серединаиз Нет.одинжетон。
$_ : Включатьтрубопроводобъектсерединаизтекущийобъект. существоватьвернотрубопроводсерединаизкаждыйобъектиливыбранообъектосуществлятьдействоватьиз Заказсередина,Может以использоватьэтотпеременная。
$Args : Включать由未заявлениепараметри/илипередача给функция、Скриптили Скрипткусокизпараметрценитькомпозицияизмножество。
существовать创建функциячас Может以заявлениепараметр,методдаиспользовать param Ключевые словаилисуществоватьфункцияимя称后添加以круглыйскобкизаключение、запятая
отдельныйизпараметрсписок。
$ConsoleFileName : Включатьсуществоватьсессиясерединанедавноиспользоватьизконсольный файл (.psc1) из пути. существоватьпроходить PSConsoleFile параметрстарт
Окна PowerShell илииспользовать Export-Console cmdlet Воля Экспорт названия оснастки в консольный файл
час,Волянаполнениеэтотпеременная。
существоватьиспользовать Безпараметриз Export-Console cmdlet час,этоавтоматический更новыйсуществоватьсессиясерединанедавноиспользоватьизконсольный файл。
Может以использоватьэтотавтоматическийпеременная Конечно要更новыйиздокумент。
$Error : Включатьошибкаобъектизмножество,Этиобъектвыражатьнедавноизнекоторые ошибки。недавноизошибкада Долженмножествосерединаиз Нет.одиношибкаобъект
($Error[0])。
$Event :Включатьодин PSEventArgs объект,Долженобъектвыражатьодин正существовать被в理изсобытие。
этотпеременная Толькосуществоватьсобытие注册Заказ(例нравиться Register-ObjectEvent)из Action Заполнение внутри блока.
этотпеременнаяизценитьда Get-Event cmdlet Возврат из одного объекта.
потому чтоэтот,Можно найти в Action Скрипткусокиспользуется в $Event переменнаяизсвойство(例нравиться
$Event.TimeGenerated)。
$EventSubscriber : Включатьодин PSEventSubscriber объект,Долженобъектвыражать正существовать被в理изсобытиеизсобытие订阅者。
этотпеременная Толькосуществоватьсобытие注册Заказиз Action Заполнение внутри блока.этотпеременнаяизценить
да Get-EventSubscriber cmdlet Возврат из одного объекта.
$ExecutionContext : Включатьодин EngineIntrinsics объект,Долженобъектвыражать Windows PowerShell Хост изосуществлять контекст.
Может以использоватьэтотпеременная来Находить Можетиспользовать于 cmdlet изосуществлятьобъект。
$False : Включать FALSE。Может以использоватьэтотпеременнаясуществовать Закази Скриптсерединавыражать FALSE,и Нетдаиспользоватьнить”false”。если
Долженнить Преобразовать в ненулевое значениенитьилиненулевое целое число,но Может Воля Долженнитьинтерпретируется как TRUE。
$ForEach : Включать ForEach-Object 循环изсчетчик。Может以верно $ForEach переменнаяизценитьиспользоватьсчетчикизсвойствоиметод.
этотпеременная仅существоватьбегать For Он существует, когда цикл завершен, и будет удален, когда цикл завершен.
$Home : Включатьиспользовать户из Домашний каталогизполный путь。этотпеременная等效于 %homedrive%%homepath% средапеременная。
$Host : Включатьодинобъект,Долженобъектвыражать Windows PowerShell изтекущий Хозяинприложение程序。Может以использоватьэтотпеременнаясуществовать命
令серединавыражатьтекущий Хозяин,или者показыватьили Изменять Хозяинизсвойство,нравиться $Host.version、$Host.CurrentCulture
или $host.ui.rawui.setbackgroundcolor(“Red”)。
$Input : одинсчетчик,это Включатьпередача给функцияизвходить。$Input переменнаяс учетом регистра,Только能использовать于функцияи Скрипткусок。(Скрипткусок本质上да未имяизфункция。)существоватьфункцияиз Process кусоксередина,$Input переменная Включатьтекущийродытрубопроводсерединаизобъект. существовать Process После завершения блока $Input ценить за НУЛЕВОЙ. Если функция не Process заблокировать, тогда $Inputизценить Можетиспользовать于 End кусок,это Включатьфункцияизвсевходить。
$LastExitCode : Включатьбегатьизнаконецодинна основе Windows код выхода из программы.
$Matches : $Matches переменнаяи -match и -not match оператор Вместеиспользовать。
Скалярный вход Воля отправлен в -match или -notmatch операторчас,если检测приезжатьсоответствовать,но会возвращатьсяодинлогическое значениеценить,ииспользовать由всесоответствоватьнитьценитькомпозицияиз哈希表наполнение $Matches автоматическийпеременная。
$MyInvocation : Включатьодинобъект,Долженобъектиметьсвязанныйтекущий Заказ(нравиться Скрипт、функцияили Скрипткусок)изинформация。Может以использовать Долженобъектсерединаизинформация(нравиться Скриптизпутьидокументимя ($myinvocation.mycommand.path) илифункцияизимя称
($myinvocation.mycommand.name))идентифицироватьтекущий Заказ。верно于Находить正существоватьбегатьиз Скриптизимя称,этот非常有использовать。
$NestedPromptLevel : Включатьтекущийуровень подсказки。ценить 0 Указывает исходный уровень подсказки. Значение увеличивается при входе на уровень вложенности и уменьшается при выходе из уровня вложенности.
例нравиться,существоватьиспользовать $Host.EnterNestedPrompt метод, Windows PowerShell Появится вложенная командная строка. существовать Windows PowerShell отладчиксерединаприезжать达断точкачас,Windows PowerShell 也Появится вложенная командная строка. существовать进入嵌套提示час,Windows PowerShell приостанавливает текущую команду,держатьосуществлятьконтекст,и递增
$NestedPromptLevel переменнаяизценить。要创建更多嵌套Заказ提示符(最多 128 сорт)иливозвращатьсяприезжать原始Заказ提示符,Пожалуйста, завершите команду,или Введите «выход».
$NestedPromptLevel переменная有助于跟踪уровень подсказки。Может以创建Включатьэтотценитьиз备использовать WindowsPowerShell Заказ提示符,сделатьэтотценить始终Может见。
$NULL: Включать NULL илинулевойценить。Можно найти в Закази Скриптиспользуется вэтотпеременнаявыражать NULL,и Нетдаиспользоватьнить”NULL”。
если Долженнить Преобразовать в ненулевое значениенитьилиненулевое целое число,но Может Воля Долженнитьинтерпретируется как TRUE。
$PID : Включатьмедведьтекущий Windows PowerShell сеанс из процесса и идентификатор процесса (PID)。
$Profile : Включатьтекущийиспользовать户итекущий Хозяинприложение程序из Windows PowerShell 配置документизполный путь。Можно найти в Заказ
используется вэтотпеременнаявыражать配置документ。例нравиться,Можно найти в Заказиспользуется вэтотпеременная Конечноданет已创建某个配置документ:
Также доступно в команде используется вэтотпеременная创建配置документ: new-item -type file -path $pshome -force этотснаружи,возвращаться Можно найти в Заказиспользуется вэтотпеременнаясуществовать记事本середина打开配置документ:
notepad $profile
$PSBoundParameters
Включать Активностьпараметр及Чтотекущийценитьизсловарь。толькосуществоватьзаявлениепараметриз作использовать域(нравиться Скриптилифункция)середина,
этотпеременнаяиметь толькоценить。Может以использоватьэтотпеременнаяпоказыватьили Изменятьпараметризтекущийценить,也Может以Воляпараметрценитьпередача给
другой Скриптилифункция。
Основной пример:function {
param($a, $b)
# Display the parameters in dictionary format.
$psboundparameters
# Call the 1 function with $a and $b.
1 @psboundparameters
}
$PsCmdlet : Включатьодинобъект,Долженобъектвыражать正существоватьбегатьиз cmdlet или高сортфункция。
Можно найти в cmdlet илифункция代码используется в Долженобъектизсвойствоиметод来响应использоватьизсостояние。例нравиться,ParameterSetName свойство Включать正существоватьиспользоватьизпараметрнаборизимя称,и ShouldProcess метод Воля WhatIfи Confirm параметр динамически добавляется в cmdlet。
связанный $PSCmdlet автоматическийпеременнаяиз详细информация,Видеть about_Functions_Advanced。
$PsCulture : Включать Операционная системасерединатекущий所использоватьизрегиональныйизимя称。региональный Конечночисло字、валютаи Дата и т. д.изпоказывать Формат。этотдасистемаизSystem.Globalization.CultureInfo.CurrentCulture.Name свойствоизценить。要获取системаиз System.Globalization.CultureInfo объект,пожалуйстаиспользовать Get-Culture cmdlet。
$PSDebugContext : существовать调试期间,этотпеременная Включатьсвязанный调试средаизинформация
существоватьдругойчас间,этотпеременная Включать NULL ценить。потому чтоэтот,Может以использоватьэтотпеременная指示отладчикда Иметь контроль над。наполнение Из后,этотпеременная Включатьодиниметь Breakpoints иInvocationInfo свойствоиз PsDebugContext объект。InvocationInfo свойство有Несколько十分有использоватьизсвойство,включать Location свойство. Расположение свойство指示正существовать调试из Скриптизпуть。
$PsHome
Включать Windows PowerShell из Каталог установкиизполный путь(Обычно%windir%System32WindowsPowerShellv1.0)。Можно найти в Windows PowerShell документизпутьиспользуется вэтотпеременная。例нравиться,подиз Заказсуществовать概念性帮助主题серединапоиск”variable”слово:
select-string -pattern variable -path $pshome*.txt
$PSScriptRoot :Включатьначать ссерединаосуществлять Скриптмодульиз Оглавление。проходитьэтотпеременная,Скрипт Может以использоватьмодульпуть来访问другой资源。
$PsUICulture
Включать Операционная системасерединатекущий所использоватьизиспользовать户界面 (UI) региональныйизимя称。UI Культура определяет, какие текстовые строки используются для пользователей.
элементы интерфейса(нравиться菜单иинформация)。этотдасистемаиз
System.Globalization.CultureInfo.CurrentUICulture.Name свойствоизценить。要获取система
из System.Globalization.CultureInfo объект,пожалуйстаиспользовать Get-UICulture cmdlet。
$PsVersionTable
Включатьодин Только读哈希表,Должен哈希表показыватьсвязанныйсуществоватьтекущийсессиясерединабегатьиз Windows PowerShell Версия 详
подробная информация.
В таблицу входят следующие позиции:
* CLRVersion: общеязыковая среда выполнения (CLR) из Версия
* BuildVersion: текущий Версияизвнутренний Версия Число
* PSVersion: Windows PowerShell Версия Число
* WSManStackVersion: WS-Management 堆栈из Версия Число
* PSCompatibleVersions: итекущий Версиясовместимыйиз Windows PowerShell Версия
* SerializationVersion :序列化методиз Версия
* PSRemotingProtocolVersion:Windows PowerShell протокол удаленного управленияиз Версия
$Pwd : Включатьодинпутьобъект,Долженобъектвыражатьтекущий Оглавлениеизполный путь。
$Sender : Включатьгенерироватьэтотсобытиеизобъект。этотпеременная Толькосуществоватьсобытие注册Заказиз Action Заполнение внутри блока.
этотпеременнаяизценить也Можетсуществовать Get-Event возвращатьсяиз PSEventArgs
(System.Management.Automation.PSEventArgs) объектиз Sender свойствосерединапопытаться найтиприезжать。
$ShellID : Включатьтекущий shell из идентификатора.
$SourceArgs : Включатьвыражать正существовать被в理изсобытиеизсобытиепараметризобъект。этотпеременная Толькосуществоватьсобытие注册Заказиз Action
Заполнение внутри блока.этотпеременнаяизценить也Можетсуществовать Get-Event возвращатьсяиз PSEventArgs
(System.Management.Automation.PSEventArgs) объектиз SourceArgs свойствосерединапопытаться найтиприезжать。
$SourceEventArgs : Включатьодинобъект,Долженобъектвыражать从正существовать被в理изсобытиеиз EventArgs серединаполучено изиз
Нет.одинсобытиепараметр。этотпеременная Толькосуществоватьсобытие注册Заказиз Action Заполнение внутри блока.
этотпеременнаяизценить也Можетсуществовать Get-Event возвращатьсяиз PSEventArgs
(System.Management.Automation.PSEventArgs) объектиз SourceArgs свойствосерединапопытаться найтиприезжать。
$This : существоватьопределение Скриптсвойствоили Скриптметодиз Скрипткусоксередина,$This переменная引использовать要扩展изобъект。
$True : Включать TRUE。Можно найти в Закази Скриптиспользуется вэтотпеременнаявыражать TRUE。
описывать: Встроенные переменные включают переменные среды по умолчанию в PS, переменные отображения элементов управления командной строки и переменные параметров функций.
Список встроенных переменных
# 1.средапеременная
$env
# 2.информация控制переменная
$DebugPreference #Показать вывод отладки: Необязательное значение [Continue | SilentlyContinue]
$ErrorActionPreference #Display Вывод ошибки: Необязательное значение [Continue | SilentlyContinue]
# 3. Функции и параметрыпеременные.
$глобальный
$местный
$функция
$вход # трубопроводданныесерединаизменятьпеременная
$arg # Универсальныйпараметрпеременная
# 4.Чтоэтопеременная
$Host # Например, $host.UI.Rawui
Базовый экземпляр:
#1.читать специальноеизсредапеременная
PS> ls $env:
PS> $env:windir
C:\Windows
PS> $env:ProgramFiles
C:\Program Files
#2.дляи Чтоэтопеременная Будьте последовательны,你Может以把это插入приезжатьтекстсередина。
PS> "My computer name $env:COMPUTERNAME"
My computer name MYHome--01
#3.创建новыйизсредапеременная
PS> $env:Var1="This is my environment variable"
PS> $env:Var2="Hollow, environment variable"
PS> $env:Path+=";C:\\python\\"
#4. Вступает в силу переменное обновление среды.
# Операция метода .NET [environment]::SetEnvironmentvariable может вступить в силу немедленно.
PS> [environment]::SetEnvironmentvariable("Path", ";c:\WeiyiGeek", "User")
PS> [environment]::GetEnvironmentvariable("Path", "User")
;c:\WeiyiGeek
Примечание:
описывать:PSсерединавсе Нетдамы самиизопределениеизпеременная Все属于водить машинупеременная(比нравитьсясредапеременная),этоиз前缀Толькодапредоставленный намодин Может以访问информацияиз虚拟водить машину.。
Основной пример:
#0.проверить тебяPSподдерживатьизводить машину
PS > Get-PSDrive
# Name Used (GB) Free (GB) Provider Root CurrentLocation
# ---- --------- --------- -------- ---- ---------------
# C 58.24 91.76 FileSystem C:\ Users\WeiyiGeek
# Cert Certificate \
# D 11.76 249.24 FileSystem D:\
# E 19.07 240.93 FileSystem E:\
# Env Environment
# F 88.83 171.46 FileSystem F:\
# Function Function
# G FileSystem G:\
# HKCU Registry HKEY_CURRENT_USER
# HKLM Registry HKEY_LOCAL_MACHINE
# I FileSystem I:\
# Variable Variable
# WSMan WSMan
#1.$После цветкаскобкисерединаизпуть必须даспецифическийизпуть,и Нет能带возвращатьсяценить。
PS> Invoke-Expression "`${$env:HOMEDRIVE/Powershell/ping.bat}" #Помещение обратной кавычки "\`" перед $ приведет к преобразованию $ в обычные символы, а интерпретатор продолжит анализ второго $
#параметр=${C:/Powershell/ping.bat}
описывать: PS Все переменные имеют область видимости, определяющую доступность переменной. С помощью области видимости можно ограничить видимость переменных, особенно в функциях и скриптах.
PSподдерживать四个作использовать域:общая ситуация、текущий、частный и сценарий
。
Установите область действия одной переменной:
$global
Глобальные переменные: существоватьвсеиз作использовать域серединаэффективный,если你существовать Скриптили者функциясерединанаборобщая ситуацияпеременная,Эта переменная по-прежнему действительна, даже если сценарий и функции запускаются и завершаются.$script
Переменные сценария: Она будет действительна только внутри сценария, включая функции в сценарии. Переменная будет переработана после завершения сценария.$private
Частные переменные: Он будет действителен только в текущей области и не может распространяться на другие области.$local
Переменные по умолчанию: Модификатор можно опустить, он действителен в текущей области, а другие области имеют к нему разрешения только на чтение.Tips : 利использовать"."
来Изменятьпеременнаяиз Может见性,укреплятьпеременная Может见性пределизпреимуществоПрозрачная среда инициализации
,ноеслиопределениеиздаодинсамостоятельное чтениеизпостоянныйизчас候этот个да Нет能действоватьиудалитьиз;
Советы: Локальные переменные будут наследовать значения от глобальных переменных, но изменения локальных переменных не повлияют на глобальные переменные, если глобальные не указаны явно;
Основной пример:
1) Влияние переменных при обмене
# 1.существовать Скрипт里面изпеременнаяне влияетинтерактивныйсредасерединаизпеременная
PS E:\WeiyiGeek> $DemoVar="This is a Demo"
PS E:\WeiyiGeek> .\Demo1.ps1
# D:\Programs\java\jdk
PS E:\WeiyiGeek> $DemoVar
# This is a Demo
# 2.точка"."来бегать Скрипт Долженсимвол域LinuxсерединаизsourceЗаказ有другой曲такой же工Из妙;
PS E:\WeiyiGeek> . .\Demo1.ps1
# D:\Programs\java\jdk
PS E:\WeiyiGeek> $DemoVar # Скриптсерединаизпеременнаяпокрытый$DemoVarпеременная(关键точка)
# D:\Programs\java\jdk
2) Экземпляр области действия с одной переменной
# 1.существоватьтекущий控制台Только存существоватьодин作использовать域,Доступ через модификатор,Что实访问издатакой жеодинпеременная:
PS C:\Users\WeiyiGeek> $var="WeiyiGeek"
PS C:\Users\WeiyiGeek> $private:var
# WeiyiGeek
PS C:\Users\WeiyiGeek> $script:var
# WeiyiGeek
PS C:\Users\WeiyiGeek> $global:var
# WeiyiGeek
PS C:\Users\WeiyiGeek> $local:var="WeiyiGeek"
# WeiyiGeek
# 2.обычнопеременнаяиGlobalмежду модификаторамиизразница(существоватьфункциясередина利использоватьGlobal修饰符来Изменятьобычнопеременная Изсередина)
$var = "WeiyiGeek"
function demo1() { echo "Function => $($Var)";$Var = "Function Change";echo "-----$($Var)-----"}
$var; demo1; $var
# Function => WeiyiGeek
# WeiyiGeek
# -----Function Change-----
# WeiyiGeek
function demo2() { $Global:Var = "Function Change $var переменная";$var}
$var; demo2; $var
# WeiyiGeek
# Function Change WeiyiGeek переменная
# Function Change WeiyiGeek переменная
# 3.Private修饰符существовать控制台серединаизпеременнаязащищать,Нет让этосуществоватьфункцияи Скриптсерединапосетил,но他Может以被GlobalМодификация модификатора;
function fun() {
echo "DemoVar=$($DemoVar)";
$global:DemoVar="This is Function Inner";
$DemoVar;
}
$Private:DemoVar="This is private variable"
fun;
$DemoVar
# осуществлятьрезультат (этотвда关键точка私有переменнаясуществоватьфункциясередина Не могу получить)
# DemoVar=
# This is Function Inner
# This is Function Inner
$Global:DemoVar="This is global variable"
fun;
$DemoVar
$Private:DemoVar
# осуществлятьрезультат (Глобальная переменная может быть заменена внутренней глобальной переменной)
# DemoVar=This is global variable
# This is Function Inner
# This is Function Inner
# This is Function Inner
# 4. Влияние проверки глобального модификатора середина на частный модификатор из
function fun() {"DemoVar=$DemoVar";$Global:DemoVar="This is Global";$DemoVar;}
$Private:DemoVar="this is private"
$DemoVar
fun #Будет влияние на последующую переменную
$DemoVar
# осуществлятьрезультат
# this is private
# DemoVar=this is private
# This is Global
# This is Global
# 5.Local修饰符Может以проходить$globalмодификация модификатораизпеременная
function fun() {"DemoVar=$DemoVar";$Global:DemoVar="This is Global";$DemoVar;}
$Local:DemoVar="this is Local"
$DemoVar
fun
$Local:DemoVar
# осуществлятьрезультат
# this is Local
# DemoVar=this is Local
# This is Global
# This is Global
описывать: Powershell По умолчанию поддерживаются следующие типы .NET:
PS слабый тип и сильный тип
описывать: PSраспределять данныеодиноптимальныйизданныетип也称作“弱тип”,еслиодин Целое число превышено32битовое целое числоизверхний предел([int32]::MaxValue
),это就会分配один64битовое целое числоизданныетип;такой же样еслидадесятичный,нить,日期час间也会分配成为Долженверно应изданныетип,использоватьчас候非常изудобный;
Просмотр типа переменной
PS C:\Users\WeiyiGeek> $var=1024; $var -is [int]
True
PS C:\Users\WeiyiGeek> $var=1024; $var -is [int32]
True
PS C:\Users\WeiyiGeek> $string="weiyigeek"; $string -is [string]
True
# (1) Введите получить
$string.gettype()
# IsPublic IsSerial Name BaseType
# -------- -------- ---- --------
# True True String System.Object
# (2) тип объекта全称
$string.gettype().fullname
# System.String
проходить$variable
изGetType().Name
ПроверятьипроверятьPSназначен напеременнаяизданныетип。
PS C:\Users\WeiyiGeek> $var=1024;$var is Int
Int32
PS C:\Users\WeiyiGeek> $var=1024;$var.GetType().name
Int32
PS C:\Users\WeiyiGeek> (999999999999999).GetType().name
Int64
PS C:\Users\WeiyiGeek> (99999999999999999999).GetType().name
Decimal
PS C:\Users\WeiyiGeek> (3.14).GetType().name
Double
PS C:\Users\WeiyiGeek> (3.14d).GetType().name
Decimal
PS C:\Users\WeiyiGeek> ("String").GetType().name
String
PS C:\Users\WeiyiGeek> (date).GetType().name
DateTime
PS C:\Users\WeiyiGeek> (get-date).GetType().name
DateTime
Определите переменные указанного типа:
#1.例нравитьсяопределениеодинByteтипизпеременная,потому что为Byteизопределение域为[0,255],однажды попробовалиспользоватьодин Нетсуществоватьопределение域серединаизценитьдарить Долженпеременная就会показывать一条ошибкаинформация。
PS C:\Users\WeiyiGeek> [byte]$b=254
PS C:\Users\WeiyiGeek> $b.gettype()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Byte System.ValueType
#2.DateTimeтипобъектизсвойствоизиспользовать
PS C:\Users\WeiyiGeek> [DateTime]$date="2019-11-27 09:19:20"
PS C:\Users\WeiyiGeek> $date
27 ноября 2019 г. 9:19:20
PS C:\Users\WeiyiGeek> $date.DayOfWeek
Wednesday
PS C:\Users\WeiyiGeek> $date.DayOfyear
331
PS C:\Users\WeiyiGeek> $date.AddDays(-10)
17 ноября 2019 г. 9:19:20
#3.XMLтипобъектизиспользовать Запрос.exe и узел .dll
PS > [XML]$xml=(Get-Content .\Demo2.xml)
PS > $xml
# logo
# --------
# logo
PS > $xml.FirstChild
# extensions unextensions
# ---------- ------------
# extensions unextensions
PS > $xml.logo.extensions.e
# .exe
# .dll
Сильное и слабое преобразование типов переменных
описывать:каждыйпеременнаяиз Все有自己изтип,этот个специфическийизтип存放существоватьPsVariableобъектизAttributes[System.Management.Automation.PSVariableAttributeCollection]
свойство,Если эти атрибуты пусты,Может以给этот个переменная存放任何типизданные,PSВыберу правильныйизтип。
Что следует отметить: После определения атрибута Attribute другие типы данных не могут быть сохранены по желанию;
Решение:использовать (Get-Variable var).Attributes.Clear()
Прозрачный Attributes
этотчас强тип又изменять变成为弱тип了;
#1.Декларация по умолчаниюизпеременнаяда弱тип
PS C:\Users\WeiyiGeek> $var=1024
PS C:\Users\WeiyiGeek> (Get-variable var).Attributes
PS C:\Users\WeiyiGeek> $var.gettype()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Int32 System.ValueType
PS C:\Users\WeiyiGeek> $var=3.14
PS C:\Users\WeiyiGeek> $var.gettype()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Double System.ValueType
#2. Сильный тип к слабому типу.
PS C:\Users\WeiyiGeek> [Int]$var=1024
PS C:\Users\WeiyiGeek> (Get-variable var).Attributes
TransformNullOptionalParameters TypeId
------------------------------- ------
True System.Management.Automation.ArgumentTypeConverterAttribute
PS C:\Users\WeiyiGeek> $var=3.14;$var
3
PS C:\Users\WeiyiGeek> $var="2019 IS END"
#никто ВоляValue»2019 IS END”изменять换为тип“System.Int32”。ошибка:“входитьнитьиз Неправильный формат。”
PS C:\Users\WeiyiGeek> (Get-variable var).Attributes.clear() # Ключевой момент — строгая очистка типов
PS C:\Users\WeiyiGeek> $var="2019 IS END";$var
2019 IS END
описывать:переменнаяPSVariableобъект
изАтрибуты
能够存储一些附件состояние, Обычно используемые проверки содержимого переменных:
Основной пример:
#1.ValidateLengthAttribute пределодиннитьпеременнаяиз长度为роды2-5Из间
PS> $var="пределпеременная"
PS> $condition = New-Object System.Management.Automation.ValidateLengthAttribute -ArgumentList 2,5 #ключевая точка
PS> (Get-Variable var).Attributes.Add($condition)
PS> $var="Легенда о героях Кондора" #переменная Длина от 2 до 5
#2.ValidateNotNullAttribute пример
PS> $a=123
PS> $con=New-Object System.Management.Automation.ValidateNotNullAttribute
PS> (Get-Variable a).Attributes.Add($con)
PS> $a=$null #никто法проверятьэтотпеременная,потому что为ценить Нетдапеременная a изэффективныйценить。
#3.ValidateNotNullOrEmptyAttribute пример Обратите внимание, что @() — это пустой массив.
PS> $con=New-Object System.Management.Automation.ValidateNotNullOrEmptyAttribute
PS> (Get-Variable a).Attributes.clear()
PS> (Get-Variable a).Attributes.add($con)
PS> $a=$null
#4.ValidatePatternAttribute пример利использоватьобычныйвыражениепроверятьEmailФормат
PS> $email="@mossfly.com"
PS> $con=New-Object System.Management.Automation.ValidatePatternAttribute "[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}"
PS> (Get-Variable email).Attributes.Add($con)
PS> $email="abc@abc.com"
#5.ValidateRangeAttribute примерпроверять月份1-12
PS> $month=1
PS> (Get-Variable month).Attributes.Add($(New-Object System.Management.Automation.ValidateRangeAttribute -ArgumentList 1,12))
PS> $month=10
описывать: мы можем поставить PS Он считается очень мощным калькулятором. Помимо поддержки операторов математических выражений, он также поддерживает единицы емкости компьютера и преобразование базы HEX;
Общие единицы мощности компьютера: Bit - B - KB - MB - GB - TB - PB
Справочный адрес: https://docs.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_arithmetic_operators?view=powershell-7.1
1) Базовые операторы. PowerShell содержит базовые операторы, которые мы обычно используем для арифметических операций и т. д.
- ()
- +
- -
- *
- /
- %
2) Операторы сравнения: PowerShell включает в себя множество операторов сравнения для сравнения значений или поиска значений, соответствующих определенному шаблону.
# ценить & нить
-eq равный
-ne Нетравный
-gt больше, чем
-ge больше, чемилиравный
-lt меньше, чем
-le меньше, чемилиравный
-Like использовать * сопоставление с подстановочными знаками
-NotLike Нетиспользовать * сопоставление с подстановочными знаками
-Match соответствоватьобозначениеизобычныйвыражение
-NotMatch Нетсоответствоватьобозначениеизобычныйвыражение
-Contains Конечнонабор合серединаданет Включатьобозначениеизценить
-NotContains Конечнонабор合данет Нет Включатьидентификацияценить
-In Конечнообозначениеизценитьданетсуществоватьнабор合середина
-NotIn Конечнообозначениеизценитьданет Нетсуществоватьнабор合середина
-Replace 替换обозначениеизценить
Tips: Все операторы, перечисленные выше, не чувствительны к регистру и будут c Размещается перед оператором, указанным в последней таблице, чтобы сделать его чувствительным к регистру.
Tips: -Like и -Match
Операторы также могут сбивать с толку, Что两者изразницадабывшийс подстановочным знаком * и ? Используется совместно с
и后者иобычныйвыражение Используется совместно с
。
Tips: PowerShell Версия 3.0 Впервые был введен оператор сравнения «in». Другими словами -in Исполнение и contains Операторы сравнения выполняют ту же проверку, но в противоположных направлениях.
Tips: Существуют также методы, которые можно использовать для замены контента, например Replace()
,Что工作原理похожий于替换оператор。нода По умолчанию,-Replace операторы не чувствительны к регистру, тогда как Replace()
Методы чувствительны к регистру.
Tips: нить Сравниватьчасда模仿忽略大小写ии大小写敏感Сравниватьчас小写字母меньше, чемпрописная буква。если需要大小写敏感Сравнивать Может以использоватьдействовать符-ceq, -clt, -cle, -cge
,если要明确из大小写Нет敏感Сравниватьдействовать符дасуществовать默认действовать符前加前缀i,Прямо сейчас-ieq,-ilt,-ile,-igt,-ige
。
3) Логические операторы. Как следует из названия, выносятся логические суждения (битовые операторы применимы только к целочисленным типам).
-and :и
-or :или
-xor :другойили
-not | ! :обеспечить регресс
-band Бит И 5 -band 3 # 1
-bnot Побитовое «нет» -bnot 5 # -6
-bor в соответствии с位“или” 5 -bor 0x03 # 7
-bxor в соответствии с位“другойили” 5 -bxor 3 # 6
-shl Воля немного сместилась влево 3 -shl 2 # 12
-shr Воля немного сместилась вправо 16 -shr 2 # 4
4) Логическое преобразование. Несколько операторов, включая побитовые, возвращают значения числового типа. PowerShell может автоматически преобразовывать их в значения логического типа. Правила преобразования следующие:
1) любой ненулевойценить Воля会被изменять换为$true
2) ненулевая длинаизнить Воля会被изменять换为$true
3) хотя бы одинизнабор合会возвращаться$true
4) другойобъект Воля会被изменять换成$true,если они не $null
5) Приоритет операторов
- PowerShell Арифметические операторы обрабатываются в следующем порядке:
# приоритет оператор иллюстрировать
# 1 () скобки
# 2 - Для отрицательных чисел или унарного оператора
# 3 *, /, % для умножения и деления
# 4 +, - Сложение и вычитание
# 5 -band, -bnot Для битовых операций
# 5 -bor, -bxor Для битовых операций
# 5 -shr, -shl Для битовых операций
- PowerShell Выражения обрабатываются слева направо в соответствии с правилами приоритета.
# выражение результат
# 3+6/3*4 11
# 3+6/(3*4) 3.5
# (3+6)/3*4 12
- PowerShell вычислитьвыражениеиз顺序Может能другой于你использоватьиздругой编程и Скрипт语言
существоватьэтот Примерсередина,верновыражение $a++ Произвести расчеты $b[$a] . существовать $a++ $a заявлениеиспользуется в Из后,вычислить Изменятьизценить, $c[$a++] носуществоватьиспользуется в это раньше $b[$a] 。 серединаиз $a переменная $b[$a] равный 1 ,и Нетда 0 ; потому чтоэтот,заявление Воляценитьдарить $b[1] ,и Нетда $b[0] 。
$a = 0
$b = @(1,2)
$c = @(-1,-2)
$b[$a] = $c[$a++] # $b[1] = $c[0] ==> -1
# 1. Четыре арифметических действия (коммутативная формула)
PS > 3.14*10*10
314
PS > 1+3-(2.4-5)*(7.899-4.444)
12.983
#Зависит от $+круглыйскобки+выражение составляютизпеременная Принадлежит ребенкувыражениепеременная,этот样изпеременная会先вычислитьвыражение,тогда поставьвыражениеизценитьвозвращаться。
PS C:\Users\WeiyiGeek> $((3+9)/3)
4
#2. Шестнадцатеричное преобразование.
PS > 0xA
10
PS > 0xB
11
PS > 0xff
255
#3. Автоматически определять единицы мощности компьютера.
PS > 1kb
1024
PS > 1GB
1073741824
PS > 1gb
1073741824
PS > 1gb/1kb
1048576
PS > 1gb/20mb*10kb
524288
PS C:\ps> 80kb*800*30/1gb # 假нравитьсяодин网站каждый页面大小为80kb,统计показывать每天изPVдействовать为800,1个月下来占использоватьизпропускная способность
1.8310546875
Основной пример:
# 1. «PowerShell» заглавными буквами эквивалентен слову «powershell» строчными буквами.
'PowerShell' -eq 'powershell' # True
'PowerShell' -ceq 'powershell' # False Разница в регистре
# 2.Нетравный Сравниватьоператоробеспечить регресссостояние。
'PowerShell' -ne 'powershell'
# 3.больше, чем、больше, чемилиравный、меньше, чемименьше, чемилиравный均Можетиспользовать于нитьиличислоценить。
5 -gt 5 # False
5 -ge 5 # True
# Сравните мощность компьютера
PS > 1gb -lt 1gb+1
True
PS > 1gb -lt 1gb-1
False
# 4.осуществлять"like"соответствовать -Like с подстановочным знаком * и ? Используется совместно с
'PowerShell' -like '*shell' # True
'PowerShell' -notLike 'weiyigeek' # True
# 5.использоватьобычныйвыражениеосуществлятьсоответствовать -Match
'PowerShell' -match '^*.shell$'
'master@weiyigeek.top' -match '@' # 貌似Только要有одиннитьсоответствовать Прямо сейчасвозвращатьсяTrue
# True
'master@weiyigeek.top' -match 'ji'
# False
'master@weiyigeek.top' -notMatch 'weiye'
# True
# 6.список Включатьили者Нет Включатьобозначение`$Numbers`переменная,-NotContains Переверните логику, чтобы увидеть $Numbers переменнаяданет Нет Включатьценить。
(3,4,5) -contains 2
$Numbers = 1..10 # использоватьобъемоператор Волячисло字 1 приезжать 10 存储существоватьпеременнаясередина
$Numbers -contains 15 # False
$Numbers -notcontains 15 # True
# 7.этоиспользовать于Конечно某个ценитьданет“роды”множествосередина。
# $Numbers переменнаядамножество,потому что为это Включать Несколькоценить。
# и -contains оператор Такой же,not обеспечить регресс -in операториз логики.
15 -in $Numbers # False
10 -in $Numbers # True
10 -notin $Numbers # False
# 8.-replace оператор Используется для замены контента
# еслиобозначениеодинценить,но会Воля Долженценить替换为нулевойценить。
'PowerShell' -replace 'Shell' # Power
# если要Воляценить替换为другойценить,пожалуйстасуществовать要替换из模式Из后обозначениеновыйценить。
'my website address is hTTp://wwww.weiyigeek.top' -replace 'http','https'
my website address is https://wwww.weiyigeek.top
# Если вы хотите сделать замены с учетом регистра, используйте Replace() метод.
'my website address is hTTp://wwww.weiyigeek.top'.Replace('http','https')
my website address is hTTp://wwww.weiyigeek.top
# 9. Сравните массивы и коллекции
PS WeiyiGeek> 1,2,3,4,3,2,1 -eq 3
3
3
Основной пример:
# 1. Отрицание оператора как -не нода像高сорт语言Такой же”! “ Также поддерживает поиск опровержений
PS > $a= 2 -eq 3
PS > $a
False
PS > -not $a
True
PS > !($a)
True
PS > $true -xor $false
True
PS > $true -xor $true
False