Test of een bestand bestaat met Powershell
An another post for me that is simple and hopefully serves as an example for people trying to get blogging as#SQLNewBloggers.
Een tijdje terug schreef ik een PowerShell script (PoSh) om de SQL Saturday XML bestanden te downloaden die gebruikt worden voor de Guidebook applicatie. Deze bevatten een heleboel informatie die ik wilde verzamelen, transformeren en bewaren.
Het script was echter niet geweldig. Het maakte een lus van een bepaald aantal keren en downloadde de bestanden opnieuw. Niet de meest efficiënte oplossing, zeker niet als ik wil dat dit regelmatig gebeurt.
Eén van de verbeteringen die ik wilde maken was controleren of het bestand bestaat, en zo niet, het dan downloaden. Maar als het wel bestaat, dan sla ik het bestand over. Ik weet dat dit betekent dat ik geen bijgewerkte bestanden krijg als de schema’s veranderen, wat mogelijk is, maar in dat geval kan ik het bestand gewoon van mijn bureaublad verwijderen en vanaf daar verder gaan.
Ik heb even gezocht, en vond een paar links naar het Test-Path cmdlet. In wezen geef je dit een bestandspad en het geeft waar of onwaar terug. Bijna precies wat ik nodig heb. Dit is wat ik aan mijn code heb toegevoegd:
if (Test-Path $DestinationFile) {
#doe iets
}
Hoewel ik ook actie wil ondernemen als het bestand niet bestaat. In de meeste talen zou ik een ! vooraan toevoegen om “niet” aan te geven. Maar dat werkt niet in PoSh, net zoals > niet groter dan betekent.
Een andere zoekopdracht liet me de -NOT operator zien. Dat is wat ik nodig heb, maar ik kan dit niet doen:
if (-NOT Test-Path $DestinationFile) {
#doe iets
}
In plaats daarvan moet ik een enkele expressie hebben voor -NOT, wat meer haakjes betekent. Dat is niet zo erg. Ik gebruikte deze code:
if (-NOT (Test-Path $DestinationFile)) {
#do something
}
Dat werkte geweldig en nu download ik alleen de bestanden die ik nodig heb. Als ik opnieuw wil downloaden (voor nieuwere gebeurtenissen), verwijder ik gewoon die bestanden en voer het script opnieuw uit.
SQLNewBlogger
Deze post ontstond toen ik aan het script begon te werken. Het duurde eigenlijk langer om dit te schrijven dan de oplossing te vinden, het aan de code toe te voegen, en het te testen. Dat proces duurde ongeveer 5 minuten.
Het duurde ongeveer 10 minuten om deze post te schrijven. Ik had ook nog een tweede bericht gebaseerd op vergelijkbare aanpassingen aan het script, dus dat heb ik in nog eens 5 minuten gedaan.