Попробуйте изменить update="insTable:display"
на update="display"
. Я считаю, что вы не можете префикс id с идентификатором формы.
Команда $$
. Мне часто приходится выполнять повторяющиеся операции с одним и тем же путем к файлу. Например, проверьте файл и затем откройте его в VIM. Функция $$
делает это тривиальным
PS> tf edit some\really\long\file\path.cpp
PS> gvim $$
. Оно короткое и простое, но экономит много времени.
Выполните итерацию в обратном порядке по последовательности, просто используйте длину строки с 1 на другой стороне диапазона.
foreach (x в seq.length..1) {Do-Something seq [x]}
Функция, которую я часто упускаю из виду, - это возможность передать файл в оператор switch.
Switch будет перебирать строки и сопоставлять их со строками (или регулярными выражениями с - параметр регулярного выражения), содержимое переменных, чисел или строки можно передать в выражение, которое будет оцениваться как $ true или $ false
switch -file 'C:\test.txt'
{
'sometext' {Do-Something}
$pwd {Do-SomethingElse}
42 {Write-Host "That's the answer."}
{Test-Path $_} {Do-AThirdThing}
default {'Nothing else matched'}
}
$ OFS - разделитель выходных полей . Удобный способ указать, как элементы массива разделяются при отображении в строку:
PS> $OFS = ', '
PS> "$(1..5)"
1, 2, 3, 4, 5
PS> $OFS = ';'
PS> "$(1..5)"
1;2;3;4;5
PS> $OFS = $null # set back to default
PS> "$(1..5)"
1 2 3 4 5
Всегда гарантирует получение результата массива . Рассмотрим этот код:
PS> $files = dir *.iMayNotExist
PS> $files.length
$ files в этом случае могут быть $ null, скалярным значением или массивом значений. $ files.length не даст вам количество файлов, найденных для $ null или для одного файла. В случае одного файла вы получите размер файла !! Всякий раз, когда я не уверен, сколько данных я верну, я всегда заключаю команду в подвыражение массива, например:
PS> $files = @(dir *.iMayNotExist)
PS> $files.length # always returns number of files in array
Тогда $ files всегда будет массивом. Он может быть пустым или содержать только один элемент, но будет массивом. Это значительно упрощает рассуждение о результате.
Поддержка ковариации массива:
Along the lines of multi-variable assignments.
$list = 1,2,3,4
While($list) {
$head, $list = $list
$head
}
1
2
3
4
На сегодняшний день самой мощной функцией PowerShell является его поддержка ScriptBlock . Тот факт, что вы можете так кратко передать то, что фактически являются анонимными методами без каких-либо ограничений типа, примерно так же эффективен, как указатели функций C ++, и так же прост, как лямбды C # или F #.
Я имею в виду, как здорово, что с помощью ScriptBlocks вы можете реализовать оператор using (которого в PowerShell изначально нет). Или, до версии 2, вы даже могли реализовать try-catch-finally .
function Using([Object]$Resource,[ScriptBlock]$Script) {
try {
&$Script
}
finally {
if ($Resource -is [IDisposable]) { $Resource.Dispose() }
}
}
Using ($File = [IO.File]::CreateText("$PWD\blah.txt")) {
$File.WriteLine(...)
}
Как это круто!
Тот факт, что вы можете так кратко передать то, что фактически являются анонимными методами без каких-либо ограничений типа, примерно так же эффективен, как указатели функций C ++, и так же прост, как лямбда-выражения C # или F #.Я имею в виду, как здорово, что с помощью ScriptBlocks вы можете реализовать оператор using (которого в PowerShell изначально нет). Или, до версии 2, вы даже могли реализовать try-catch-finally .
function Using([Object]$Resource,[ScriptBlock]$Script) {
try {
&$Script
}
finally {
if ($Resource -is [IDisposable]) { $Resource.Dispose() }
}
}
Using ($File = [IO.File]::CreateText("$PWD\blah.txt")) {
$File.WriteLine(...)
}
Как это круто!
Тот факт, что вы можете так кратко передать то, что фактически являются анонимными методами без каких-либо ограничений типа, примерно так же эффективен, как указатели функций C ++, и так же прост, как лямбда-выражения C # или F #.Я имею в виду, как здорово, что с помощью ScriptBlocks вы можете реализовать оператор using (которого в PowerShell изначально нет). Или, до версии 2, вы даже могли реализовать try-catch-finally .
function Using([Object]$Resource,[ScriptBlock]$Script) {
try {
&$Script
}
finally {
if ($Resource -is [IDisposable]) { $Resource.Dispose() }
}
}
Using ($File = [IO.File]::CreateText("$PWD\blah.txt")) {
$File.WriteLine(...)
}
Как это круто!
Я использовал это:
if (!$?) { # if previous command was not successful
Do some stuff
}
, и я также довольно часто использую $ _ (текущий объект конвейера), но они могут быть более известны, чем другие вещи.
Тот факт, что многие операторы также работают с массивами и возвращают элементы, для которых сравнение истинно, или работают с каждым элементом массива независимо:
1..1000 -lt 800 -gt 400 -like "?[5-9]0" -replace 0 -as "int[]" -as "char[]" -notmatch "\d"
Это быстрее, чем Где -Объект
.
Не языковая функция, но очень полезная
f8
- принимает текст, который вы уже ввели, и выполняет поиск команды, которая начинается с этот текст.