<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Abhik Ghosh</title>
    <description>The latest articles on Forem by Abhik Ghosh (@abhgho).</description>
    <link>https://forem.com/abhgho</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F746750%2F7fff480e-1063-47bc-bacb-cc17a93ece24.png</url>
      <title>Forem: Abhik Ghosh</title>
      <link>https://forem.com/abhgho</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/abhgho"/>
    <language>en</language>
    <item>
      <title>Obsidian Sync - with Powershell</title>
      <dc:creator>Abhik Ghosh</dc:creator>
      <pubDate>Mon, 15 Nov 2021 16:24:14 +0000</pubDate>
      <link>https://forem.com/abhgho/obsidian-sync-with-powershell-3cf3</link>
      <guid>https://forem.com/abhgho/obsidian-sync-with-powershell-3cf3</guid>
      <description>&lt;p&gt;I was an Evernote user until not anymore. If you ever used Evernote, you know the ease this tool brings to your life. You throw anything at it and Evernote keeps everything synced up to the cloud and made them available immediately on other devices. If you switch device and wish(for whatever reason) to view what you just uploaded in another device - it is there. I used Evernote for my work, personal knowledge, journal and also as a file cabinet. Everything was good and I had only one complaint that they just let you sync only two devices on the free plan - Evernote why not just three, I wanted evernote on my Ipad too? &lt;/p&gt;

&lt;p&gt;Until recently, this was my tool for note taking. But then I saw many productivity experts talking about the issues with recent Evernote builds and the security concerns. I heard people saying what if Evernote shuts them down tomorrow and does not let you take back up of your notes. 😟 This was a trigger point, I started noticing many other problems along with whatever was said about Evernote at the time. I started feeling the tool a little slow to open, the sync suddenly started taking lot of time. May be everything I was seeing because I was convinced that someday, I'm going to loose my notes if Evernotes gets shutdown 🙂. More than the security concern, I was worried about losing those years worth of notes. &lt;/p&gt;

&lt;p&gt;I found Obsidian online. Oh, all my problems solved and this is free. or was it? The sync is sold as a service and I was not ready to take that monthly recurring cost just yet. I wanted to try things myself. Below are what I use on a day to day basis. I was trying to solve the syncing issue between these devices: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A Lenovo WIndows 11 Laptop&lt;/li&gt;
&lt;li&gt;An Android 11 phone - make and iteration doesn't matter&lt;/li&gt;
&lt;li&gt;An Ipad 8th Gen&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There are lots of discussions around the similar topic - &lt;a href="https://forum.obsidian.md/t/mobile-app-for-iphone-sync-with-dropbox/18676/7" rel="noopener noreferrer"&gt;https://forum.obsidian.md/t/mobile-app-for-iphone-sync-with-dropbox/18676/7&lt;/a&gt;&lt;br&gt;
But I was mostly sure that the Android phone cannot sync from icloud drive and Ipad cannot sync from dropbox. But my computer can sync to both - Thanks 💖Windows. &lt;/p&gt;

&lt;p&gt;I tried Linux/ Win utilities like rsync(wsl2), robocopy but finally settled with writing couple of powershell scripts to have a better control on the files. &lt;/p&gt;

&lt;h2&gt;
  
  
  How does it work
&lt;/h2&gt;

&lt;p&gt;Step1: I keep my Obsidian Vault in Dropbox Sync folder. &lt;br&gt;
Step2: I use a free app called DropSync on my Andoird. This allows me to sync my Andoird's local drive vault and Dropbox&lt;br&gt;
Step3: I wrote a powershell script to push my vault to icloud sync folder. The script only copies files which have increased in size(Not best way - but worked for me, specially at times the last modified dates are little less reliable) &lt;br&gt;
Step4: I open the icloud vault on my Ipad. If I modify anything on the Ipad, the changes are then synced to the icloud drive and essentially available on my computer before I next time use it. &lt;br&gt;
Step5: I have a powershell script to sync anything new from the icloud drive to my computer vault(which is sitting in the Dropbox sync folder). &lt;br&gt;
Step6: Just as an extra step of caution, I take backup of my vault on my computer harddrive and save the file in Google drive once everyday.&lt;/p&gt;

&lt;p&gt;This is totally overkill for the purpose, you may say. But one less thing to worry about, right? You can focus more on your notes.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff1358wt0gl6md4zrp0ci.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff1358wt0gl6md4zrp0ci.jpeg" alt="Obsidian Sync"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is the repo for your reference - &lt;a href="https://github.com/abhgho/obsidian-powershell-automation" rel="noopener noreferrer"&gt;https://github.com/abhgho/obsidian-powershell-automation&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@zal3wa?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Damian Zaleski&lt;/a&gt; on &lt;a href="https://unsplash.com/s/photos/automation?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>powershell</category>
      <category>automation</category>
      <category>obsidian</category>
      <category>icloud</category>
    </item>
    <item>
      <title>Make peace with github using powershell</title>
      <dc:creator>Abhik Ghosh</dc:creator>
      <pubDate>Sun, 07 Nov 2021 08:33:41 +0000</pubDate>
      <link>https://forem.com/abhgho/make-peace-with-github-using-powershell-514d</link>
      <guid>https://forem.com/abhgho/make-peace-with-github-using-powershell-514d</guid>
      <description>&lt;p&gt;I am sure, you could relate to this pain of doing a repetitive set of tasks when you start a new project on your machine. Following are the typical tasks a developer do, no matter which language, framework or IDE they are using.  &lt;/p&gt;

&lt;p&gt;Step 1: Create a project directory or make use of a CLI generator to create the project structure &lt;br&gt;
Step 2: On browser, open github.com and create repository using UI&lt;br&gt;
Step 3: Create local repository if CLI hasn't already been created&lt;br&gt;
Step 4: Add the remote(Github) repository, do an initial commit and push&lt;/p&gt;

&lt;p&gt;Well, I wish step 2 is allowed to be done using the git cli someday. But as of today, there is no way one can create a repository without going to the browser and manually creating the same using UI. So, here is my solution which works great and saves me from repeating myself again and again. I use a Windows Computer and love powershell for this sort of automation scripts. I created a powershell function, when invoked, it uses Github Rest API to create a new repository and also does the initial commit for my empty project README.MD file. I have documented the steps below just in case you are looking for a reference. You can use the script as is and you are free to modify this to fit your need. &lt;/p&gt;
&lt;h4&gt;
  
  
  Here is the powershell solution:
&lt;/h4&gt;

&lt;p&gt;Start here: create your github access token - &lt;a href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"&gt;https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token&lt;/a&gt;&lt;br&gt;
Place the access token in a file called &lt;code&gt;config&lt;/code&gt; with a prefix as below: &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1b5dS1ej--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rjvws4ys80lb2df3ldeu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1b5dS1ej--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rjvws4ys80lb2df3ldeu.png" alt="Add Access Token" width="880" height="198"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Preferably at the same path where the config file is saved, create powershell script &lt;code&gt;New-Repo.ps1&lt;/code&gt;. This name can be anything else as you wish it to be. The following is the basic structure of the script with three parameters: RepoName, UserName and ConfigFile.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="kr"&gt;function&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;New-Repo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;

     &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;CmdletBinding&lt;/span&gt;&lt;span class="p"&gt;()]&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="kr"&gt;Param&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Parameter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Mandatory&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="bp"&gt;$true&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="nv"&gt;$RepoName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Parameter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Mandatory&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="bp"&gt;$true&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="nv"&gt;$UserName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
         &lt;/span&gt;&lt;span class="nv"&gt;$ConfigFile&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\Users\abhik\Documents\dev-env\powershell\GitAutomation\config"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;## Default config file location&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add the following code to retrieve the access token from the config file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;##### Read Github Access Token #####&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nv"&gt;$fileContent&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Get-Content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$ConfigFile&lt;/span&gt;&lt;span class="w"&gt;

 &lt;/span&gt;&lt;span class="nv"&gt;$accessToken&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="kr"&gt;foreach&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$line&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$fileContent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="kr"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$line&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Contains&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'PERSONAL_ACCESS_TOKEN'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nv"&gt;$accessToken&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$line&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-replace&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;".*="&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make a POST call to github repo rest endpoint &lt;code&gt;https://api.github.com/user/repos&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;##### Prepare Github API Post call #####&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$UserName&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nv"&gt;$pass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$accessToken&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nv"&gt;$pair&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nv"&gt;$user&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nv"&gt;$pass&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="w"&gt;

 &lt;/span&gt;&lt;span class="nv"&gt;$encodedCreds&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;System.Convert&lt;/span&gt;&lt;span class="p"&gt;]::&lt;/span&gt;&lt;span class="n"&gt;ToBase64String&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;System.Text.Encoding&lt;/span&gt;&lt;span class="p"&gt;]::&lt;/span&gt;&lt;span class="n"&gt;ASCII.GetBytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$pair&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nv"&gt;$basicAuthValue&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Basic &lt;/span&gt;&lt;span class="nv"&gt;$encodedCreds&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nv"&gt;$Headers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;@{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nx"&gt;Authorization&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$basicAuthValue&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nv"&gt;$body&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;@{&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$RepoName&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nx"&gt;accept&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'application/vnd.github.v3+json'&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nx"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="bp"&gt;$false&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

 &lt;/span&gt;&lt;span class="nv"&gt;$bodyJson&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ConvertTo-Json&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$body&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="n"&gt;Write-Output&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Posting Data: "&lt;/span&gt;&lt;span class="nv"&gt;$bodyJson&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nv"&gt;$response&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Invoke-WebRequest&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Method&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'POST'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Uri&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'https://api.github.com/user/repos'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Headers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$Headers&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Body&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$bodyJson&lt;/span&gt;&lt;span class="w"&gt;

 &lt;/span&gt;&lt;span class="nv"&gt;$responseJson&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$response&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ConvertFrom-Json&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nx"&gt;Write-Output&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Repo : &lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nv"&gt;$responseJson&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;html_url&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; Created!"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Last and final step is to initialize a local git repo and do the initial commit.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;##### Create local repo and sync remote #####&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="n"&gt;Write-Output&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Creating local repo..."&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;init&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="n"&gt;New-Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\README.MD&lt;/span&gt;&lt;span class="w"&gt; 
 &lt;/span&gt;&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;README.MD&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;commit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-m&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'initial commit -setup with powershell script'&lt;/span&gt;&lt;span class="w"&gt;

 &lt;/span&gt;&lt;span class="n"&gt;Write-Output&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Syncing remote..."&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;remote&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;origin&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nv"&gt;$responseJson&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;html_url&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;.git"&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--set-upstream&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;origin&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;master&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, to be able to access this function on a powershell shell, I added the function in the powershell profile. Here is how to add the function to your profile. &lt;/p&gt;

&lt;p&gt;Open the profile using &lt;code&gt;notepad.exe $PROFILE&lt;/code&gt;. This will prompt you to create the profile file(accept it) if you are using the profile for the first time. Once the profile is created, add the following line &lt;code&gt;. C:\dev-env\powershell\GitAutomation\New-Repo.ps1&lt;/code&gt;. Please note, the dot(.) at the beginning of the line is important. It instructs powershell to keep the function in memory. &lt;/p&gt;

&lt;p&gt;And that should do. Restart the powershell terminal and you should be able to call &lt;code&gt;New-Repo&lt;/code&gt; function within your project root folder. Pass on the repo name along with the github username. Then, powershell will do its thing and you'll save yourself few seconds of manual work. As a developer, I think we should save time even if it is a few second 🙂 because we are lazy. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9tpYOet3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e747k9hpylvl0o8m0ncu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9tpYOet3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e747k9hpylvl0o8m0ncu.png" alt="Output" width="880" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Conclusion
&lt;/h4&gt;

&lt;p&gt;The above code blocks outlines the powershell way of doing this automation. But the idea can easily be extended for a shell script. I use this script on a regular basis. More than time, it saved me from context switch we programmers do not like that much. &lt;/p&gt;

&lt;p&gt;Full Code is available here: &lt;a href="https://github.com/abhgho/git-powershell-automation/blob/main/New-Repo.ps1"&gt;https://github.com/abhgho/git-powershell-automation/blob/main/New-Repo.ps1&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@synkevych?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Roman Synkevych&lt;/a&gt; on &lt;a href="https://unsplash.com/s/photos/github?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>powershell</category>
      <category>github</category>
      <category>automation</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
