My sql выполнение запросов

bonguides.com

Вы можете подключиться к базе данных MySQL/MariaDB, получить данные из таблицы, добавить или обновить данные прямо из PowerShell скрипта. В этой статье мы рассмотрим несколько простых способов выполнения SQL запросов к удаленной базе данных MySQL (MariaDB) из консоли PowerShell.

Прежде всего проверьте, что удаленный SQL сервер разрешает удаленный подключения по порту 3306 (по умолчанию):

Test-NetConnection mysqlDBserver -port 3306

Затем на сервере MySQL разрешите пользователю удаленные подключения с вашего IP адреса или с любого хоста (замените IP на %):

I would like to change the default format of dates and times in Powershell to use the ISO 8601 format,
so instead of displaying as dd/mm/yyyy, it would use yyyy-mm-dd

Please note: I do not want to have to specify anything on the date objects directly,
as this will be annoying when there is a single date field on a returned object.
I want to change the default formatting that will be used everywhere.

This is not answered by Windows ISO 8601 timestamp
The answers there all involve working on the DateTime objects directly.

# NOT THIS
Get-Date -Format 'yyyy-mm-dd'
# NOR THIS
$d = Get-Date
$d.ToString('o')

The solution must work for Powershell 7 and above.


By default the Get-Date cmdlet in PowerShell returns the current date and time.

Method 1: Use (Get-Date).ToString()

Method 2: Use (Get-Date).Date

Both methods will return the current date without the time.

Example 1: Use (Get-Date).ToString()

One way to get the current date without the time in PowerShell is by using the ToString() method to simply format the current date and time using M/d/yyyy as the date format:

PowerShell Get-Date without time

This returns 3/5/2024, which is the current date when this article is being written.

Note that the format M/d/yyyy specifies that only one digit should be used for the month and day if they month and day only contain a single digit.

If you would like to display two digits for the month and day, you can use the MM/dd/yyyy format instead:

My sql выполнение запросов

This returns 03/05/2024.

Example 2: Use (Get-Date).Date

Another way to get the current date without the time in PowerShell is by using the .Date property of the Get-Date cmdlet.

My sql выполнение запросов

This returns Tuesday, March 5, 2024 12:00:00 AM, which is the current date when this article is being written with the time component set to zero.

How to Compare Dates in PowerShell
How to Format a DateTime in PowerShell
How to Calculate Date Difference in PowerShell

How do I update only the year of an existing date variable in Powershell? I have been attempting to update the year of a PowerShell Date variable however I’ve not yet been successful.

I made an attempt to post minimal code and I see that based on some answers my code I posted was TOO minimal. I’m not using Get-Date in my actual code anywhere. I have several dates with invalid years such as the year 1058 and some others with the year of 1059. These all need to be updated to a valid year and I chose to update them to the year 1900 but I am not finding how to do so.

PS > $DateUpdateYear = Get-Date # This is actually a date in a csv file imported into PowerShell using Import-Csv. I have 73k records and one column has bad dates. I need to find these bad dates less than the year 1900 and update them to 1900.
PS > $DateUpdateYear.Year
output > 2023
PS > $DateUpdateYear.Year = 1900
output > InvalidOperation: 'Year' is a ReadOnly property

Each time I google how to set the Year I continue to get results for the Set-Date cmdlet and each time I read the documentation for Set-Date I’m not seeing anything about setting the Year of an existing date.

I decided to try what appeared to be a “Too good to be true” attempt by simply setting the Year property using $DateUpdateYear.Year = 1900 however when attempting to do this the error states that the Property is ReadOnly.

This answer was successfully answered and to help any others who might want to update the date of date strings via a loop prior to import into SQL Server (Express/Azure) the below will show you how to accomplish this and also show how to overcome some other obstacles importing data into SQL Server/Azure.

  1. End Of Line Characters were Line Feeds aka New Lines. Exported files with new lines as the end of line character are typical with Linux based systems. I discovered that many tools hate Line Feeds and so the first step of the Powershell script is to Replace the EOL Line Feed as Carriage Return Line Feeds which are the standard. LF –> CRLF
  2. The next issue is that the imported file needs a column to represent the placeholder for the Identity Column. I want/need each record after it is imported to have a unique key and so this is accomplished by simply creating the table with an Identity Column. The issue I ran in to is that the csv/tsv file being imported still needed to have the identity column in the file. I couldn’t get it to import without providing knowledge of this column in the Format File and therefore the import file.
  3. The last item I needed to address was to perform some pre-import data manipulation. SQL Server Dates have a restriction where the oldest date they support is the year 1753. My file had several dates with years prior to 1753 which caused the entire record to fail. This Post and the answer to it was the solution to this final problem. And now that I have the loop in place and knowledge on how to read and update the data in these PowerShell objects I can use this to update any bad data or to perform any type of pre-import analysis.
:/>  В Windows 11 не работает интернет по кабелю. Ethernet

When managing files on a Windows system, you might often need to know when a file was created. In this PowerShell tutorial, we’ll explore various methods to get the file creation date using PowerShell with various examples.

$file = Get-Item "C:\MyFolder\MyFile.txt"
$creationDate = $file.CreationTime
Write-Output "The file was created on: $creationDate"

This script will output the exact date and time when the file was created.

PowerShell provides various cmdlets to get the created date of a file. Let us explorer all these methods:

Method 1: Using Get-Item

The Get-Item cmdlet is the widely used PowerShell command for retrieving a file’s creation date. It retrieves the item at a specified location and returns an object that represents the item, including its properties.

Here’s a simple example:

$file = Get-Item "C:\MyFolder\Notes.docx"
$creationDate = $file.CreationTime
Write-Output "The file was created on: $creationDate"

This script will output the creation date and time of the specified file. The CreationTime property of the file object contains the information we need.

I executed the PowerShell script, and you can see the output in the screenshot below:

Get File Creation Date in PowerShell

Method 2: Using Get-ChildItem

If you are working with multiple files, then you can use the PowerShell Get-ChildItem cmdlet.

Here is an example to get the file creation date of all the files presented in a directory using PowerShell.

$files = Get-ChildItem "C:\MyFolder\*"
foreach ($file in $files) { $creationDate = $file.CreationTime Write-Output "The file $($file.Name) was created on: $creationDate"
}

This script lists all the files in a directory and prints their creation dates. It’s particularly useful for inventorying multiple files.

You can see the output below, after I executed the above PowerShell script.

How to Get File Creation Date in PowerShell

Method 3: Using the [System.IO.File] Class

$filePath = "C:\MyFolder\Notes.docx"
$creationDate = [System.IO.File]::GetCreationTime($filePath)
Write-Output "The file was created on: $creationDate"

This method directly taps into the .NET framework’s file handling capabilities, which can be more familiar to those with a background in .NET languages.

Method 4: Using WMI Objects

Windows Management Instrumentation (WMI) is another powerful feature that can be utilized with PowerShell to get file creation dates. Here’s how you can do it:

$filePath = "C:\MyFolder\file.txt"
$creationDate = Get-WmiObject -Query "SELECT CreationDate FROM CIM_DataFile WHERE Name = '$filePath'"
Write-Output "The file was created on: $($creationDate.ConvertToDateTime($creationDate.CreationDate))"

This script uses WMI to query the CIM_DataFile class, which represents a data file on a computer system running Windows. Note that you need to replace the backslashes in the file path with double backslashes in the WMI query.

Method 5: Using PowerShell Custom Functions

You can also create a custom PowerShell function to encapsulate the logic for retrieving file creation dates and make it reusable.

function Get-FileCreationDate { param ( [string]$filePath ) $file = Get-Item $filePath return $file.CreationTime
}
# Usage
$creationDate = Get-FileCreationDate -filePath "C:\MyFolder\file.txt"
Write-Output "The file was created on: $creationDate"

With this function, you can easily call Get-FileCreationDate with different file paths to get their creation dates.

Conclusion

PowerShell offers multiple ways to retrieve the creation date of a file. In this PowerShell tutorial, I have explained how to get file creation date in PowerShell using various methods and I hope it will help you.

You may also like:

Все привет! В уходящем году хочу оставить небольшой след про такой сильный язык программирования, как PowerShell. Вероятно, уже в следующем году, ввиду тенденции отказа от Windows систем в нашей стране, моя практика в этой области закончится, а за пару лет активности, так и не собрался с силами опубликовать что-то подобное. Кода тут не будет, для этого у меня есть отдельная работа с заметками, цель статьи, еще раз подчеркнуть реальные возможности данного языка, где я буду ссылаться на работы, которые я старался делать универсальными, а так же сделаю акцент на полезных модулях.

Буквально два года назад, имея базовые знания навигации в консоли Linux, написание несложных batch-файлов и небольшой опыт VBScript открыл для себя PowerShell, и после этого я уже в прямом смысле этого слова, не мог остановиться реализовывать свои идеи, правда, такое дело очень затягивает. В один момент решился завести канал на GitHub и там же по сей день виду работу с заметками, где за это время накопилось более 6 тысяч строк из описания работы cmdlet (PowerShell-команд) и утилит для Системного Администратора (AD, Exchange, VMWare, MSSQL и т.д.) с примерами, ведь далеко не все получалось найти в интернете, порой, только изучая на практике свойства и методы объектов, можно получить желаемый результат. Так же набралась небольшая коллекция модулей и тестовый стенд WinForms с примерами работы различных методов, на котором я в дальнейшем базировался для написания приложений с графическим интерфейсом. Все работы писал по большей части для себя с целью автоматизировать и разгрузить текущий рабочий процесс, иногда помочь коллегам, именно по этому мне хочется поделиться своими наработками, возможно кому-то это еще сможет пригодиться.

Так сложилось, что многие с кем я общался, недолюбливают данный язык, порой, не воспринимают за язык вовсе, на рынке и правда для написания скриптов есть более функциональные конкуренты, но когда ты являешься администратором Windows систем, то это однозначно лучший, а порой незаменимый инструмент под рукой. Во-первых, язык является объектно-ориентированным, что сильно упрощает работу, и хотя в последнее время активно пишу на Bash, где преимущества в работе с текстом очевидны, но в силу привычки, мне очень не хватает данной модели, прибегая к сторонним инструментам, например jq и xmllint, которые нужно изучать отдельно, формировать массивы используя свой синтаксис. В PowerShell весь процесс автоматизирован и привычен. Во-вторых, язык на прямую интегрирован с платформой .NET, что дает возможности, как создание графических форм, используя WinForms и WPF, сетевые сокеты (например, можно написать свой syslog сервер), использовать различные библиотеки (изначально написанные на, или для C#), вплоть до создания и манипуляциями с графикой (создание или редактирование изображений).

:/>  Как увидеть все файлы на флешке

Думаю очевидно, что для системного администратора графический интерфейс дает много возможностей, например, можно оптимизировать работу консольной команды или целого ряда cmdlet, не запоминая все ключи, имея возможность менять параметры наглядно в формах интерфейса. Автоматизировать процесс создания учетных записей в Active Directory, или формирование динамических табличный отчет состояния инфраструктуры VMWare (помимо набора модулей из PowerCLI присутствует целый ряд встроенных командлетов для Hyper-V) или Exchange (EMShell), где с помощью нескольких кликов можно узнать состояние всех баз данных и групп доступности в удобном формате, просмотреть message tracking log и выгрузить PST (возможность, которая отсутствует в консоли управления). Все это позволяет автоматизировать рутину, а главное, оптимизировать работу инструментов под себя. Естественно, никто не мешает выбрать другой интерфейс взаимодействия, например написать своего собственного бота Telegram или использовать Pipeline в Jenkins, где вся логика будет на PowerShell, и вероятно, для многих решения на базе скриптов могут казаться костыльными, тем не менее, это работает, а порой очень хорошо и других вариантов попросту может и не быть. Но в конечно итоге можно создать свою службу (используя бесконечный цикл и NSSM) или даже конвертировать скрипт в исполняемый exe-файл используя модуль ps2exe.

Фоновые задания (Jobs). Здесь смотря с кем сравнивать, например в Bash для управления jobs слишком мало функционала, они есть и работают неплохо, но по факту сами задания непредсказуемы и нуждаются в дополнительном логирование. По времени выполнения, тут все не очень хорошо, но наглядно, т.к. задания выполняются упорядочено (в отличие от Thread в Python). Для сравнения на ping 256 машин занимает примерно 2 минуты используя встроенный модуль, если воспользоваться модулем ThreadJob, время сокращается в среднем до 26 секунд, а вот задания через PoshRSJob уже 13 секунд.

Сравнение скорости работы модулей фоновых заданий

А вот в Python это занимает всего 5 секунд уже с resolve именем хоста, где можно так же создать отдельный поток для графического интерфейса (в примере, TKInter).

Пример графического интерфейса для ping подсети на python.

Но эту проблему можно исправить, используя классы .NET, например, System.Net.Sockets.TcpClient для проверки портов, где можно определить timeout ожидания ответа в 100мс и ситуация становится более наглядной, и демонстрирует разницу, при проверки одного порта на всех 254 хостах, создание заданий с использования ThreadJob занимает в среднем на 30-40% меньше времени, чем пауза (Start-Sleep) в 100 миллисекунд.

Сравнение метода BeginConnect с и без использования ThreadJob (timeout 100 milliseconds).

Управлять же заданиями максимально удобно, т.к. есть возможность отслеживать их статус, узнать состояние и время работы, читать вывод, ставить на паузу и даже отслеживать историю выполненных заданий.

Интерфейс последней версии RSA 1.4.1

Далее мне хотелось увеличить возможности удаленного администрирования без прямого взаимодействия с удаленным пользователем и добавить инструментов, за время работы у меня выработался определенный алгоритм, который я выполняю при анализе проблем в работоспособности операционной системы – это оценка нагрузки процессов, состояние служб, проверка uptime, последних обновлений и установленных приложений, состояние синхронизации компьютерных часов (ntp) и лицензий (kms), анализ сетевых настроен, подключений и конечно логов. Всем этим и не только возможно управлять удаленно, и у меня это получилось поместить в один интерфейс.

Работа с REST API. Есть одна ключевая особенность, PowerShell способен на прямую конвертировать вывод JSON и XML в объект (в обоих направлениях), что сильно оптимизирует работу для написания своих собственных скриптов взаимодействия с различными сервисами, для меня это остается самым удобно читаемым форматом, на фоне альтернатив, например, модулей для IDE. В остальном, преимуществ у Invoke-RestMethod или Invoke-WebRequest над curl особых нет. А вот для создания собственного REST API сервера вариантов наберется даже несколько. Имеется полноценный кроссплатформенный Web Framework Pode для создания REST API, веб-сайтов и серверов TCP/SMTP. Можно воспользоваться встроенным классом .NET HttpListener, на базе которого можно обработать все условия кодов возврата и использоваться базовую авторизация (Base64), и допустим создать возможность управления Windows системой на платформе Linux без необходимости конфигурирования WinRM – WinAPI, пример такой реализации.

В копилку кроссплатформенности, PowerShell Core очень неплохо работает в системе Linux, пусть и реализовано малая часть функционала, тем не менее можно комбинировать с другим языком, например Bash, и создать тот же простенький REST сервер.

Благодаря прямому взаимодействию PowerShell с ОС Windows и COM-объектами, вы можете создавать собственные кликеры на WScript для автоматизации любым простых действий (порой незаменимый подход по сей день, особенно, если это старые desktop Windows приложения), управлять продуктами MS Office (например, автоматическое создание подписи в Outlook с получением информации о пользователи из LDAP), создание и парсинг Excel-отчетов или автоматизация действий в браузере через Internet Explorer (альтернатива Selenium). Для примера у меня была задача, читать из smb каталога Excel-файл и смотреть на даты окончания срока доступа, по итогу такого совпадения делать рассылку на почту (указанную в столбце с Email и информацией в теле письма, о чем идет речь из столбца с описанием). Или, с указанным интервалом получать метрики измерений скорости интернета, используя Okkla Speedtest с выгрузкой их в InfluxDB и отрисовской в Grafana. Так же мне было удобно читать отчеты на почте состояния заданий и репозиториев Veeam, пока я нахожусь в дороге на работу, а позднее, написал модуль получения данных через REST API, который в дальнейшем развил до автоматизации добавления виртуальных машин в систему резервного копирования.

.NET Framework/Core. Модули есть практически для всего, можно даже создать собственный сервер мониторинга через WMI/CIM (фактически метрики дублируют Performance Counter), или библиотеку SNMP. Есть ряд библиотек для различных баз данных, таких как MS SQL (имеет 3 варианта взаимодействия, в том числе встроенный класс System.Data.SqlClient), MySQL Connector, SQLite, для других же присутствует стандартизированный программный интерфейс взаимодействия ODBC (присутствуют драйверы для PostgreSQL, Firebird, Elastic и т.д.). Примеры для работы с различными модулями можно посмотреть тут. У меня как-то была задача, реализовать рассылку оповещений об окончании срока действия лицензий из ITInvent (данная программа мне очень нравится своим удобством удобной, т.к. работал с ней в разных компаниях, но к сожалению данный функционал отсутствовал), где база крутилась в MS SQL Express на Oracle Linux, разобравшись во взаимосвязях между таблицами эту задачу получилось выполнить за 3 дня и на выходе всего 70 строк кода.

:/>  Делаем быструю игровую сборку Windows 10 Pro 20H2 за полчаса, стараясь догнать Windows 10 LTSC

Selenium. Очень удобный и простой инструмент в первую очередь для функционального тестирования, но так же может быть полезен при автоматизации тех действий, для которых не предусмотрено API. Ключевой проблемой в PowerShell является отсутствие актуального готового решения подготовки всех зависимостей для работы с данным инструментом. Данный процесс подготовки у меня получилось автоматизировать, и как мне кажется, требует отдельного внимания, по этому планирую написать отдельную статью.

На этом пожалуй все. Осознаю, что многие решения нужно было описывать в свое время отдельной статьей, все работы это только энтузиазм, не являюсь разработчиком, весь опыт исключительно на практике. В освоение большинства тем очень помогали статьи различных источников, в т.ч. Habr и большая база знаний Microsoft, где так же присутствует браузер модулей PowerShell и .NET API.

Use .ToString()

The first way to get the current date without the time in PowerShell is by using the ToString() method to simply format the current date and time using M/d/yyyy as the date format:

PS C:> (Get-Date).ToString("M/d/yyyy")
6/6/2024

Note that the format M/d/yyyy specifies that only one digit should be used for the month and day if they month and day only contain a single digit.

If you would like to display two digits for the month and day, you can use the MM/dd/yyyy format instead:

PS C:> (Get-Date).ToString("MM/dd/yyyy")
06/06/2024

This method is especially helpful if the date and time is stored in a variable.

PS C:> $date = Get-Date
PS C:> $date.ToString('MM/dd/yyyy')
06/06/2024

PowerShell модуль SimplySql для подключения к БД MariaDB и MySQL

Для подключения и выполнения запросов к MySQL/MariaDB базе можно использовать универсальный PowerShell модуль SimplySql. Этот модуль можно установить из PowerShell Online Gallery:

Install-Module -Name SimplySql

powershell modul для mysql и mariadb

Для подключения к MariDB/MySQL серверу используется командлет Open-MySQLConnection, а для выполнения SQL запросов — Invoke-SQLQuery.

Сохранить имя пользователя и пароль для подключения к SQL серверу:

Подключиться к базе данных MySQL/MariaDB на удаленном сервере:

$sqlConnect = Open-MySqlConnection -ConnectionName MyDBCon -Server 192.168.158.129 -Database myDB -Port 3306  -Credential $creds -WarningAction SilentlyContinue

Выполнить запрос к таблице MySQL с параметром:

$cityname="MSK"
$data = Invoke-SqlQuery -query "SELECT * FROM myDB WHERE city like '%$cityname%'"

Invoke-SqlQuery - выполнить SQL запрос из PowerShell

Вставить данные в таблицу:

Обновить значение поля в таблице MySQL:

Invoke-SqlQuery -query "UPDATE myDB SET city = 'MSK' WHERE ID = 233"

Закрыть подключение к базе данных:

Close-SqlConnection -connectionname MyDBCon

The PowerShell Import Script

#-Import TAB Delimited File (SQL Express and Azure Examples)
#-Declare File Paths
$SourceFile = "TAB_Delimited.tsv"
$ExportFile = "TAB_Updated.tsv"
$FormatFile = "TAB_Delimited.fmt"
$ErrorFile = "TAB_Delimited_Errors.log"
#---------- 1 Add Column to the beginning of the CSV/TSV file for the Identity Column. The Export-Csv Commandlet by default also Replaces NewLine_LF (\n) with Cariage Return Line Feed CRLF (\r\n)
#-The main purpose of the below is to add a Column at the beginning of the file as a placeholder for the Identity Column in the Staging Table.
#-The below will read the Tab Delimited file having EOL Characters as New Lines/Line Feeds \n and turn them into CRLF (Cariage Return, Line Feeds) \r\n.
#-It will also remove almost all of the double quotes it finds in the file. The -UseQuotes option is not perfect and so we still have to clean
#- up the data Post Import and remove any Leading or Trailing Double Quotes using a SQL Update.
Import-Csv $SourceFile -Delimiter "`t" |
Select-Object @{Name='_record_number';Expression={'999'}},* | #-Example Adding new column to End Select-Object *,@{Name='column3';Expression={'setvalue'}}
ForEach-Object { if ( (![string]::IsNullOrEmpty($_.client_dob)) -and ([datetime]$_.client_dob -lt (Get-Date 1900-01-01) ) ) { $_.client_dob = (Get-Date $_.client_dob -Year 1900).ToString('yyyy-MM-dd') #-Write-Host $_.pcc_id $_.client_dob } $_
} |
Export-Csv $ExportFile -Delimiter "`t" -UseQuotes Never -NoTypeInformation
#---------- 2 Import TAB Delimited File Using Format File ---------------
$global:pass = "password"
#-Use an Import File to Bulk Import Data
bcp Database.Schema.Table IN $ExportFile `
-f $FormatFile `
-e $ErrorFile `
-S LOCALSERVERPC\SQLEXPRESS `
-U sa -P $pass `
-F 2 `
#-L 1000
----------- Or using Azure with Trusted Auth follow the below example ----------------------
#-Use an Import File to Bulk Import Data into Azure
bcp Database.Schema.Table IN $ExportFile `
-f $FormatFile `
-e $ErrorFile `
-S Server_Name_Here `
-T `
-F 2 `
#-L 2000

Выполнение SQL запросов из PowerShell через MySQL коннектор

Установить mysql коннектор в windows

Примечание. Не обязательно ставить полную версию MySQL .NET Connector, достаточно скопировать на компьютер файл библиотеки MySql.Data.dll.

#подключение библиотеки MySql.Data.dll

Powershell - добавляем данные в таблицу MySQL

Следующий скрипт с помощью SELECT запроса получит данные из таблицы БД и покажет их в консоли PowerShell.

PowerShell - Select запрос из таблицы mySQL

Failed when calling Set-Culture

Set-Culture [cultureinfo]::InvariantCulture
Set-Culture: Cannot bind parameter 'CultureInfo'. Cannot convert value "[cultureinfo]::InvariantCulture" to type "System.Globalization.CultureInfo". Error: "Culture is not supported. (Parameter 'name')
[cultureinfo]::InvariantCulture is an invalid culture identifier."

Formatting the Date

If you need to format the date, PowerShell allows you to specify the format using the -Format parameter. It’s a string representation of the date, without any time information.

PS C:> Get-Date -Format "MM/dd/yyyy"
06/06/2024

Table of Contents

PS C:> Get-Date
Thursday, June 6, 2024 6:15:47 PM

Use (Get-Date).Date

Another way to get the current date without the time in PowerShell is by using the .Date property of the Get-Date cmdlet.

PS C:> Get-Date
Thursday, June 6, 2024 6:25:03 PM
PS C:> (Get-Date).Date
Thursday, June 6, 2024 12:00:00 AM

Failed to set DateTimeFormat

(Get-Culture).DateTimeFormat = [cultureinfo]::InvariantCulture.DateTimeFormat
SetValueInvocationException: Exception setting "DateTimeFormat": "Instance is read-only."

Conclusion

Using the Get-Date cmdlet in PowerShell to retrieve the current date without the time is straightforward. Here, I have explained different methods of how to get-date without time in PowerShell.

Not a reader? Watch this related video tutorial: