Azure Command to get list of resource

 

Azure Command to get a list of resources


Log in with a specific tenant 

az login --tenant [tenant id - GUID]

 

Set Subscription

az account set -s [subscription id - GUID]

az resource list --subscription  [subscription id - GUID]

 

Get Web app list [resourceGroup, name, type, etc.]

az webapp list --query '[].[name]' -o tsv

 

Get Function App List

az functionapp list --query '[].[name]' -o tsv

 

Get SQL Server Database List

az resource list -o table | select-string 'Microsoft.Sql/servers'

 

Get the storage account list

az storage account list --output table
az storage account list --query '[].[name]' -o tsv

 

Get the Service Bus queue/topic list

az servicebus queue list --namespace-name <ServiceBusName> --resource-group <ResourceGruopName> --output table

 

Azure KeyVault: Retrieve secrets and their values using PowerShell and save in Excel file

 

Azure KeyVault: Retrieve secrets and their values 

using PowerShell and saving in Excel file


$vault_name="keyvault-name"


$excel = New-Object -ComObject excel.application
$workbook = $excel.Workbooks.Add()



$uregwksht= $workbook.Worksheets.Item(1)
$uregwksht.Name = $vault_name
$row = 1
$Column = 1
$uregwksht.Cells.Item($row,$column)= "Secret-Name"
$uregwksht.Cells.Item($row,$column+1)= "Secret-Value"

# Get all secret names
$secret_names=$(az keyvault secret list --vault-name $vault_name --query [].name -o tsv)


# Loop through each secret name and get its value
foreach ($secret in $secret_names)
  $secret_value=$(az keyvault secret show --vault-name $vault_name --name $secret --query "value")
   
  Write-Output $row
  
  $row = $row + 1 
  $uregwksht.Cells.Item($row,1)= $secret
  $uregwksht.Cells.Item($row,2)= $secret_value
  
  #if ($row -eq 2) { break }
    
  # Write-Output $secret
  # Write-Output $secret_value 
  # Write-Output "-------------------------"
}



$outputpath = "D:\"+ $vault_name + ".xlsx"

Write-Output $("File saved on " + $outputpath )

$excel.displayalerts = $false
$workbook.Saveas($outputpath)
$excel.displayalerts = $true


$excel.Quit()  


Azure KeyVault: Retrieve secrets and their values

 Azure KeyVault: Retrieve secrets and their values 

using PowerShell



$vault_name  = "keyvault-name"


# Get all secret names

$secret_names=$(az keyvault secret list --vault-name $vault_name --query [].name -o tsv)


# Loop through each secret name and get its value

foreach ($secret in $secret_names)

  $secret_value=$(az keyvault secret show --vault-name $vault_name --name $secret --query "value")   

  Write-Output $secret

  Write-Output $secret_value 

  Write-Output "-------------------------"

}


Create an Excel file using PowerShell script

Create an Excel file using PowerShell script 


Here is a code to write data into Excel file and save it in a particular path.

$excel = New-Object -ComObject excel.application

#$excel.visible = $True

$workbook = $excel.Workbooks.Add()

$SheetName = "MySheet"

$uregwksht= $workbook.Worksheets.Item(1)

$uregwksht.Name = $SheetName


$row = 1

$Column = 1

$uregwksht.Cells.Item($row,$column)= "Column Title"


for ($i = 2; $i -le 5; $i++)

{

    Write-Output $i

  $row = $row + 1

  $uregwksht.Cells.Item($row,$column)= "Abcd" + $i

}

$outputpath = "D:\test.xlsx"

$excel.displayalerts = $false

$workbook.Saveas($outputpath)

$excel.displayalerts = $true

Write-Output $("File saved on " + $outputpath )

$excel.Quit()


#ref - https://community.spiceworks.com/t/create-an-excel-file-from-within-powershell/1011485

#ref - https://chanmingman.wordpress.com/2022/10/02/powershell-write-to-excel-file/

React Native - Call API on Button Click

 

React Native - Call API on Button Click


import React from 'react';
import { View, Text, Button, TouchableOpacity,Alert }from 'react-native';
const App = () => {
 
 const handleLogin = async() => {
  let resp= await fetch('https://api.demo.com/api/Data/GetDestination');
  let respjson = await resp.json();
  console.log(respjson);
  Alert.alert("msg", "123");
}
   
    return(
      <View>
        <Text style={{fontSize:70}}>
       Call Api
        </Text>    
        <Button onPress={handleLogin}
          title="Learn More"
          color="#841584"
          accessibilityLabel="Learn more about this purple button"
        />

      <TouchableOpacity>
        <Text onPress={handleLogin}>Login</Text>
      </TouchableOpacity>

      </View>
    )
  }

export default App

docker build sh: react-scripts: not found

 docker build sh: react-scripts: not found


Issue

 docker build sh: react-scripts: not found


Solution

Deleting package-lock.json and re-installing packages with npm install before building the container solved the issue for me.


Hope this will help you and save your time.

Enjoy !!!

:)

Data is Null. This method or property cannot be called on Null values

 Data is Null. This method or property cannot be called on Null values

Issue: 

Data is Null. This method or property cannot be called on Null values


Solution:

For columns that are nullable in your DB tables:

Wrong

 public string Memo { get; set; }

Correct: 

 public string? Memo { get; set; }


Hope this will help you and save your time.

Enjoy !!!

:)

The term 'New-AzResourceGroup' is not recognized as the name of a cmdlet, function, script fiel or operable program.

 The term 'New-AzResourceGroup' is not recognized as the name of a cmdlet, function, script fiel or operable program.

Issue:

New-AzResourceGroup : The term 'New-AzResourceGroup' is not recognized as the name of a cmdlet, function, script file,  or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and

try again.

At line:1 char:1

+ New-AzResourceGroup

+ ~~~~~~~~~~~~~~~~~~~

    + CategoryInfo          : ObjectNotFound: (New-AzResourceGroup:String) [], CommandNotFoundException

    + FullyQualifiedErrorId : CommandNotFoundException


Solution:

You need to install the Azure Powershell module:

You can look for just the one for this command:

Install-Module -Name Az.Resources -AllowClobber -Scope CurrentUser

Or all of them:

Install-Module -Name Az -AllowClobber -Scope CurrentUser


Hope this will help you and save your time.

Enjoy !!!

:)

SQL : Search text from all Tables of a database in SQL Server

SQL : Search text from all Tables of a database in SQL Server



Here is the store procedure which will search text from all the tables of a current database in microsoft sql server.

Store Procedure


CREATE PROC SearchAllTables ( @SearchStr nvarchar(100) ) AS 
BEGIN 
    
CREATE TABLE #Results (ColumnName nvarchar(370), ColumnValue nvarchar(3630)) 

SET NOCOUNT ON 

DECLARE @TableName nvarchar(256), 
        @ColumnName nvarchar(128), 
        @SearchStr2 nvarchar(110) 
        
SET @TableName = '' 
SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''') 

WHILE @TableName IS NOT NULL 
BEGIN 
     SET @ColumnName = '' 
     SET @TableName = ( SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)) 
                        FROM INFORMATION_SCHEMA.TABLES 
                        WHERE TABLE_TYPE = 'BASE TABLE' 
                              AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName 
                              AND OBJECTPROPERTY( OBJECT_ID( QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) ), 'IsMSShipped' ) = 0 
                      ) 
                              
 WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL) 
 BEGIN 
      SET @ColumnName = ( SELECT MIN(QUOTENAME(COLUMN_NAME)) 
                          FROM INFORMATION_SCHEMA.COLUMNS 
                          WHERE TABLE_SCHEMA = PARSENAME(@TableName, 2) 
                                AND TABLE_NAME = PARSENAME(@TableName, 1) 
                                AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar') 
                                AND QUOTENAME(COLUMN_NAME) > @ColumnName ) 
       IF @ColumnName IS NOT NULL 
       BEGIN 
             INSERT INTO #Results 
             EXEC ( 'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630) FROM ' + @TableName + ' (NOLOCK) ' + ' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2 ) 
       END 
 END 
 END 
 
 SELECT ColumnName, ColumnValue FROM #Results 
 
 END



How to use SP

exec SearchAllTables 'myserchtext'


Hope this will help you and save your time.

Enjoy !!!

:)

Error : Could not find a part of the path 'bin\roslyn\csc.exe'

Error : Could not find a part of the path 'bin\roslyn\csc.exe'



Error

[error]C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\
Microsoft\VisualStudio\v16.0\Web\Microsoft.Web.Publishing.targets(2601,5):
Error : Copying file bin\roslyn\csc.exe to
obj\Release\Package\PackageTmp\bin\roslyn\csc.exe failed.
Could not find a part of the path 'bin\roslyn\csc.exe'.

Solution

run this in the Package Manager Console: Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r

Hope this will help you and save your time.

Enjoy !!!

:)

Angular 6 : API Get and Post Method

Angular 6 : API Get and Post Method





Get

import { Injectable } from '@angular/core'; import { environment } from 'src/environments/environment'; import { ProductSearch } from '../Model/CountrySearch'; import { TokenParams } from '../Model/TokenParams'; import { Http, Headers } from '@angular/http'; import { Observable } from 'rxjs'; @Injectable() export class CountrySearchService { user = new TokenParams(); constructor(private http: Http) { this.user = JSON.parse(localStorage.getItem('loggedInUser')); } getCountryDetail() : Observable<CountrySearch[]> { var headersAPI = new Headers(); headersAPI.append('Authorization' , 'Bearer ' + this.user.access_token); return this.http.get(environment.apiUrl + environment.countrysearch, {headers : headersAPI}).map(res => res.json()); } }

POST

import { Injectable } from '@angular/core'; import { environment } from 'src/environments/environment'; import { ProductSearch } from '../Model/CountrySearch'; import { TokenParams } from '../Model/TokenParams'; import { Http, Headers } from '@angular/http'; import { Observable } from 'rxjs'; @Injectable() export class CountrySearchService { user = new TokenParams(); constructor(private http: Http) { this.user = JSON.parse(localStorage.getItem('loggedInUser')); } getCountryDetail22(searchText: string, pageNumber : number ) { var httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json; charset=utf-8', 'Authorization' : 'Bearer ' + this.user.access_token }), }; return this.http.post(environment.apiUrl + environment.countrysearch, { PageSize:10, PageNumber:pageNumber, Search: searchText }, this.httpOptions); } }

Hope this will help you and save your time.

Enjoy !!!

:)

Angular 6 : Local Storage

Angular 6 : Local Storage



Sometime, we need to store some data in client side, so we can use cookie and local storage,

Here is the example of local storage.

Component

export class LocalStorageComponent implements OnInit {
  constructor() { }
  ngOnInit() {
    //remove value if exists
    //localStorage.removeItem('loggedInUser');
  }
  setlocalstorage() : void{
    let userObj = { name: 'Rohit'lname: 'Rathod' };
    localStorage.setItem('loggedInUser'JSON.stringify(userObj));
  
  }
  getlocalstorage() : void{    
    if (localStorage.length > 0
    {
      // We have items
      let item = JSON.parse(localStorage.getItem('loggedInUser')); 
      if(item != null)
      {
        console.log(item)
        console.log(item.name)
        console.log(item.lname)
      }
    } 
    else 
    {
      // No items
      alert('no local data')
    }
  }
}

HTML

<button (click) = "setlocalstorage()">Set Storage</button>
<button (click) = "getlocalstorage()">Get Storage</button>

Hope this will help you and save your time.

Enjoy !!!

:)

Angular 6 : Submit model base Form

Angular 6 : Submit model base Form 



Here is the example to submit model base form in angular 6

 

app.module


import { FormsModule } from "@angular/forms";
 imports: [
   ...
    FormsModule ,
    ...
  ]

Model

export class Employee {
    EmployeeID : number;
    FullName : string;
    EmpCode : string;
    Mobile : string;
    Position : string;
}

Component

export class EmployeeComponent implements OnInit {
  formData : Employee;
  constructor() { 
    this.formData = {
      EmployeeID : null,
      FullName : '',
      EmpCode: '',
      Position: '',
      Mobile: ''
    }
   }
  ngOnInit() {
  }
  submitform() : void{
    console.log("FullName = " + this.formData.FullName)
    console.log("EmpCode = " + this.formData.EmpCode)
    console.log("Position = " + this.formData.Position)
    console.log("Mobile = " + this.formData.Mobile)
    //TODO
    //Call service to insert data
  }
}

HTML

<form #form="ngForm" (submit)="onSubmit(form)" autocomplete="off">
  <div class="form-group">
    <label>Fullname</label>
    <input name="FullName" #FullName="ngModel" [(ngModel)] = "formData.FullName" class="form-control" required>
    <div class="validation-error" *ngIf="FullName.invalid && FullName.touched">Fullname is required</div>
  </div>
  <div class="form-group">
    <label>Position</label>
    <input name="Position" #Position="ngModel" [(ngModel)] = "formData.Position" class="form-control">
  </div>
  <div class="form-row">
    <div class="form-group col-md-6">
      <label>EmpCode</label>
      <input name="EmpCode" #EmpCode="ngModel" [(ngModel)] = "formData.EmpCode" class="form-control">
    </div>
    <div class="form-group col-md-6">
      <label>Mobile</label>
      <input name="Mobile" #Mobile="ngModel" [(ngModel)] = "formData.Mobile" class="form-control">
    </div>    
  </div>
  <div class="form-group"> 
    <button type="button" [disabled]="form.invalid" (click) = "submitform()" class="btn btn-lg btn-block">
      Submit Button
    </button>
  </div>
</form>

Hope this will help you and save your time.

Enjoy !!!

:)

Angular 6 : Error while creating new component

Angular 6 : Error while creating new component



Sometime, we get error while creating new component in angular6 project,

Error - "More than one module matches. Use skip-import option to skip importing the component into the closest module."

Solution

ng g c componentName --module app

or

ng g c componentName --module=app.module

or

ng g c componentName --skip-import

Hope this will help you and save your time.

Enjoy !!!

:)

Angular 6 : Load more data on page scroll

Angular 6 : Load more data on page scroll


Instead of pagination, Load more data on page scroll.

Installation


npm install ngx-infinite-scroll --save

Register

Update  app.module.ts

import { InfiniteScrollModule } from 'ngx-infinite-scroll'
imports: [
    ...,
    InfiniteScrollModule,
    ...
  ],

Model


export class country{
    ID : number;
    Name : string;
}
export class countries{
    ID : number;
    Name : string;
    constructor(item?: country) {
        if (item != undefined) {
            for (let key in item) {
                try { this[key] = item[key]; }
                catch (e) { }
            }
        }
    }
}


Component.ts


export class DemoScrollDataComponent implements OnInit {
  
  pagenumber = 1;   
  recordscountry[] = []; 
  
  constructor(private countryService : CountryService) { }
  ngOnInit() { 
  this.getData(0);  
}  
getData(page : Number) {  
  console.log(this.page);  
  this.countryService.getCountry(this.page).subscribe((res=> this.onSuccess(res)); 
}  
// When we got data on a success  
onSuccess(res) {  
  console.log(res);  
  if (res != undefined) {  
    res.forEach(item => {  
      this.records.push(new countries(item));  
    });  
  }  
}   
  
onScrollDown (ev) {
  console.log('scrolled down!!'ev);
  this.page = this.page + 1;  
  this.getData(this.page);   
}
 
onUp(ev) {
  console.log('scrolled up!'ev); 
}
}


HTML

<div class="search-results"
      infinite-scroll 
      [infiniteScrollDistance]="0"
      [infiniteScrollUpDistance]="10"
      (scrolled)="onScrollDown()"
      (scrolledUp)="onUp()">
  <div *ngFor="let item of records" style="padding:20px">
    {{ item.ID }} - {{ item.Name }}
  </div>
</div>
  

Service

export class CountryService {
  constructor(private http:HttpClient) { }
  getCountry(pageNumber : Number): Observable<country[]> {
    return this.http.get<country[]>('http://localhost/DemoApp.API/api/CountryListPage?pageNumber='pageNumber)
  }
}


Hope this will help you and save your time.

Enjoy !!!

:)

Angular 6: Data Pagination using NgxPaginationModule

Angular 6: Data Pagination using NgxPaginationModule 


Here I have prepare a sample to load data in page wise.

Model


export class country{
    ID : number;
    Name : string;
}

Service

export class CountryService {
  constructor(private http:HttpClient) { }
  getCountry(pageNumber : Number): Observable<country[]> {
    return this.http.get<country[]>('http://localhost/DemoApp.API/api/CountryListPage?pageNumber='pageNumber)
  }
}


Component 


export class DemoComponent implements OnInit {
  pagenumber : Number;
  records = { count: 227data: [] };
  config = {
      itemsPerPage: 5,
      currentPage: 1,
      totalItems: this.records.count
    };
 
  constructor(private countryService : CountryServiceprivate routeActivatedRouteprivate routerRouter) { 
    this.router.routeReuseStrategy.shouldReuseRoute = function(){
      return false;
      } 
    route.queryParams.subscribe(
      params => this.config.currentPageparams['page']?params['page']:1 ); 
      this.pagenumber =  +this.route.snapshot.queryParamMap.get('page');
         this.countryService.getCountry(this.pagenumber).subscribe(data=>{      
      this.records.data = data
      this.records.count = 227;
   });
  }
  ngOnInit() {
  }
  
  pageChanged(newPagenumber) {
    this.router.navigate(['demo'], { queryParams: { page: newPage } });
  }
}


HTML

<table class="table">
    <thead>
      <tr>
        <th scope="col">#</th>
        <th scope="col">Item</th>
      </tr>
    </thead>
    <tbody>
        <tr *ngFor="let item of records.data | paginate: config">
            <th scope="row">{{item.ID}}</th>
            <td>{{item.Name}}</td>
          </tr>
    </tbody>
  </table>
 
  <div>
    <pagination-controls (pageChange)="pageChanged($event)"></pagination-controls>
</div>

Hope this will help you and save your time.

Enjoy !!!

:)

SQL : Hierarchy chain (reverse path)

SQL : Hierarchy chain (reverse path)


Hierarchy chain (reverse path)

Create Table


 CREATE TABLE [dbo].[employee](
 [EmpName] [varchar](50) NULL,
 [EmpID] [int] NULL,
 [ManagerID] [int] NULL
) ON [PRIMARY]
GO

Insert Data

INSERT [dbo].[employee] ([EmpName], [EmpID], [ManagerID]) VALUES (N'Saurav', 1, 0)
INSERT [dbo].[employee] ([EmpName], [EmpID], [ManagerID]) VALUES (N'Dravid', 2, 1)
INSERT [dbo].[employee] ([EmpName], [EmpID], [ManagerID]) VALUES (N'Kapila', 3, 2)
INSERT [dbo].[employee] ([EmpName], [EmpID], [ManagerID]) VALUES (N'Pranil', 4, 2)
INSERT [dbo].[employee] ([EmpName], [EmpID], [ManagerID]) VALUES (N'Rohini', 5, 4)
INSERT [dbo].[employee] ([EmpName], [EmpID], [ManagerID]) VALUES (N'Peeter', 6, 0)
INSERT [dbo].[employee] ([EmpName], [EmpID], [ManagerID]) VALUES (N'Keveen', 7, 6)
GO


Create a hierarchy chain (reverse path) for specific node in a tree



;with CTE(EmpID, empName, ManagerID)
AS
(
 SELECT EmpID, empName, ManagerID 
 FROM Employee F
 WHERE EmpID = 5
 UNION ALL
 SELECT F.EmpID, F.empName, F.ManagerID  
 FROM Employee F
 INNER JOIN CTE FH ON FH.ManagerID = F.EmpID  
)
SELECT * FROM CTE



Create a hierarchy chain for specific node in a tree with all child levels


WITH empCTE
AS ( SELECT EmpID, empName, ManagerID
FROM Employee
WHERE empid = 1 -- and ManagerID = 0 
UNION ALL
SELECT e.EmpID, e.empName, e.ManagerID
FROM Employee e
INNER JOIN empCTE ON e.ManagerID = empCTE.EmpID
WHERE e.ManagerID != 0)
SELECT *
FROM empCTE

Hope this will help you and save your time.

Enjoy !!!

:)

Angular 6 : Component Communication using @Input, @Output and EventEmitter


Angular 6 : Component Communication using @Input, @Output and EventEmitter


Below example is implemented to communicate parent and child component using @Input, @Output and EventEmitter.

Model class
export class country{
    ID : number;
    Name : string;
}

parent.component.ts
import { ComponentOnInit } from '@angular/core';
import { country } from 'src/app/Model/Country';
@Component({
  selector: 'app-parent',
  templateUrl: './parent.component.html',
  styleUrls: ['./parent.component.css']
})
export class ParentComponent implements OnInit { 
  namestring = "DemoName";  
  vmCountrycountry
  receivedChildMessagestring;  
  receivedChildAnotherMessagecountry;
  constructor() { }
  ngOnInit() {
    this.vmCountry = new country();
    this.receivedChildAnotherMessage = new country();
    this.vmCountry.Name = "India"
  }
  
  getMessage(messagestring) {
    this.receivedChildMessage = message
  }
  getAnotherMessage(varCountry : country) { 
    this.receivedChildAnotherMessage = varCountry
  } 
}

parent.component.html
<h1>
  parent works! test
</h1>
<app-child [name]="name" [varCountry]="vmCountry" 
          (messageToEmit)="getMessage($event)" 
          (anotherMessageToEmit)="getAnotherMessage($event)"></app-child> 
<div class="row">
  <div class="col-md-2">
      {{receivedChildMessage}}
  </div>
  <div class="col-md-2">
      {{receivedChildAnotherMessage.Name}}
    </div>
</div>

child.component.ts
import { ComponentOnInitInputEventEmitterOutput } from '@angular/core';
import { country } from 'src/app/Model/Country';
@Component({
  selector: 'app-child',
  templateUrl: './child.component.html',
  styleUrls: ['./child.component.css']
})
export class ChildComponent implements OnInit {
  @Input() namestring;
  @Input() varCountrycountry;
  @Output() messageToEmit = new EventEmitter<string>();
  @Output() anotherMessageToEmit = new EventEmitter<country>();
  
  constructor() { }
  ngOnInit() {
    
  }
  sendMessageToParent(messagestring) {
    this.messageToEmit.emit(message)
  }
  sendAnotherMessageToParent() {
    this.varCountry = new country;
    this.varCountry.ID = 10;
    this.varCountry.Name = "Japan";
    this.anotherMessageToEmit.emit(this.varCountry)
  }
}

child.component.html
<p>
  child works {{name}}!
</p>
<h1>{{varCountry.Name}}</h1>
<div class="row">
  <div class="col-md-2">
    <button (click)="sendMessageToParent('message from child')">Send to Parent</button>
  </div>
  <div class="col-md-2">
    <button (click)="sendAnotherMessageToParent()">Another Send to Parent </button>
  </div>
</div>


app.module.ts
@NgModule({
  declarations: [   
    ParentComponent,
    ChildComponent,
    .....
  ],
  .....
})


Hope this will help you and save your time.

Enjoy !!!

:)